#python #pandas
#питон #панды
Вопрос:
Сейчас я пытаюсь объединить файлы xls и рассчитать их среднее значение и общее количество. Я использовал панд для создания фреймов данных, и большинство из них хорошо работали, делая это.
Это мой код.
import pandas as pd import os import sys import glob inputpath = sys.argv[1] outputfile = sys.argv[2] all_workbooks = glob.glob(os.path.join(inputpath, 'random*.xls*')) dataframe = [] for workbook in all_workbooks: all_worksheets = pd.read_excel(workbook, sheet_name=None, index_col=None) workbook_total_id = [] workbook_number_id = [] worksheet_data_frames = [] workbook_stats_frame = [] worksheets_data_frame = None workbook_data_frame = None for worksheet_name, data in all_worksheets.items(): total_id = pd.DataFrame([float(str(ID)) for ID in data.loc[:, 'ID']]).sum() number_id = len(data.loc[:, 'ID']) average_id = pd.DataFrame(total_id / number_id) workbook_total_id.append(total_id) workbook_number_id.append(number_id) data = {'Workbook': os.path.basename(workbook), 'Worksheet': worksheet_name, 'Worksheet_total': total_id, 'worksheet_average': average_id} worksheet_data_frames.append(pd.DataFrame(data, columns=['Workbook', 'Worksheet', 'Worksheet_total', 'Worksheet_average'])) worksheets_data_frame = pd.concat(worksheet_data_frames, axis=0, ignore_index=True) workbook_total = pd.DataFrame(workbook_total_id).sum() workbook_total_id = pd.DataFrame(workbook_number_id).sum() workbook_average = pd.DataFrame(workbook_total/workbook_total_id) workbook_stats = {'Workbook':os.path.basename(workbook), 'Workbook_total':workbook_total, 'Workbook_average':workbook_average} workbook_stats_frame.append(pd.DataFrame(workbook_stats, columns=['Workbook', 'Workbook_total', 'Workbook_average'])) workbook_data_frame = pd.merge(worksheets_data_frame, workbook_stats_frame, on='Workbook', how='left') dataframe.append(workbook_data_frame) alldataconcatenated = pd.concat(dataframe, axis=0, ignore_index=True) writer = pd.ExcelWriter(outputfile) alldataconcatenated.to_excel(writer, sheet_name='sumsandaverage', index=False) writer.save()
и в этом заключается ошибка.
C:UsershaeDesktopgt;python ttt.py "C:Usershaedesktop" all.xls Traceback (most recent call last): File "C:UsershaeDesktopttt.py", line 50, in lt;modulegt; workbook_stats_frame.append(pd.DataFrame(workbook_stats, columns=['Workbook', 'Workbook_total', 'Workbook_average'])) ValueError: Data must be 1-dimensional
pd.DataFrame хорошо работает в верхней строке (которая имеет тот же код, что и строка, вызывающая ошибку), поэтому я понятия не имею, что не так со строкой ошибки.