#python #pandas
#python #pandas
Вопрос:
У меня есть входные данные в виде словаря, состоящего из 3 фреймов данных чисел. Я хочу выполнить итерацию по каждому фрейму данных с некоторыми операциями, а затем, наконец, записать результаты для каждого фрейма данных в Excel.
Следующий код работает нормально, за исключением того, что он записывает только результирующий фрейм данных для последнего ключа в словаре.
Как мне получить результаты для всех 3 фреймов данных, записанных на отдельные листы?
Input_Data={'k1':test1,'k2':test24,'k3':test3}
for v in Input_Data.values():
df1 = v[126:236]
df=df1.sort_index(ascending=False)
Indexer=df.columns.tolist()
df = [(pd.concat([df[Indexer[0]],df[Indexer[num]]],axis=1)) for num in [1,2,3,4,5,6]]
df = [(df[num].astype(str).agg(','.join, axis=1)) for num in [0,1,2,3,4,5]]
df=pd.DataFrame(df)
dff=df.loc[0].append(df.loc[1].append(df.loc[2].append(df.loc[3].append(df.loc[4].append(df.loc[5])))))
dff.to_excel('test.xlsx',index=False, header=False)
Ответ №1:
Ваша первая проблема заключается в том, что с каждой итерацией цикла вы открываете новый файл.
Согласно документации pandas:
«Можно записать несколько листов, указав уникальное имя листа. Со всеми данными, записанными в файл, необходимо сохранить изменения. Обратите внимание, что создание объекта ExcelWriter с уже существующим именем файла приведет к удалению содержимого существующего файла. «
Во-вторых, вы не указываете переменное имя листа, поэтому каждый раз данные переписываются как один и тот же лист.
Пример решения с ExcelWriter
#df1, df2, df3 - dataframes
input_data={
'sheet_name1' : df1,
'sheet_name2' : df2,
'sheet_name3' : df3
}
# Initiate ExcelWriter - use xlsx engine
writer = pd.ExcelWriter('multiple_sheets.xlsx', engine='xlsxwriter')
# Iterate over input_data dictionary
for sheet_name, df in input_data.items():
"""
Perform operations here
"""
# Write each dataframe to a different worksheet.
df.to_excel(writer, sheet_name=sheet_name)
# Finally, save ExcelWriter to file
writer.save()
Примечание 1.Вы запускаете и сохраняете объект ExcelWriter только один раз, итерации добавляют листы только к этому объекту
Примечание 2. По сравнению с вашим кодом, переменная «sheet_name» предоставляется функции «to_excel ()»
Ответ №2:
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
# Write each dataframe to a different worksheet.
for sheet_name, df in zip(sheet_names, dfs):
df.to_excel(writer, sheet_name=sheet_name)
# Close the Pandas Excel writer and output the Excel file.
writer.save()
Ответ №3:
Попробуйте изменить имя файла на каждой итерации:
Input_Data={'k1':test1,'k2':test24,'k3':test3}
file_number = 1
for v in Input_Data.values():
df1 = v[126:236]
df=df1.sort_index(ascending=False)
Indexer=df.columns.tolist()
df = [(pd.concat([df[Indexer[0]],df[Indexer[num]]],axis=1)) for num in [1,2,3,4,5,6]]
df = [(df[num].astype(str).agg(','.join, axis=1)) for num in [0,1,2,3,4,5]]
df=pd.DataFrame(df)
dff=df.loc[0].append(df.loc[1].append(df.loc[2].append(df.loc[3].append(df.loc[4].append(df.loc[5])))))
file_name='test'
file_number=str(file_number)
dff.to_excel( str(file_name file_number) ".xlsx",index=False, header=False)
file_number=int(file_number)
file_number = file_number 1
Комментарии:
1. Я получаю следующую ошибку
can only concatenate str (not "int") to str
2.
No engine for filetype: ''
Связано ли это с тем, что .xlsx исключен изto_excel
3. Возможно, попробуйте сейчас