我在模板文件中保存了一些复杂的格式,我需要从pandas数据帧中保存数据。问题是当我使用pd.to_excel保存到此工作表时,pandas会覆盖格式。有没有办法以某种方式粘贴价值观'将df形成工作表?我正在使用熊猫0.17
import openpyxl
import pandas as pd
wb= openpyxl.load_workbook('H:/template.xlsx')
sheet = wb.get_sheet_by_name('spam')
sheet.title = 'df data'
wb.save('H:/df_out.xlsx')
xlr = pd.ExcelWriter('df_out.xlsx')
df.to_excel(xlr, 'df data')
xlr.save()
答案 0 :(得分:15)
openpyxl 2.4附带了一个实用程序,用于将Pandas Dataframes转换为openpyxl可以直接使用的东西。代码看起来有点像这样:
from openpyxl.utils.dataframe import dataframe_to_rows
rows = dataframe_to_rows(df)
for r_idx, row in enumerate(rows, 1):
for c_idx, value in enumerate(row, 1):
ws.cell(row=r_idx, column=c_idx, value=value)
您可以调整枚举的开始,将单元格放置在您需要的位置。
有关详细信息,请参阅openpyxl documentation。
答案 1 :(得分:5)
我稍微修改了@CharlieClark 的好答案以避免索引(原始 Excel 文件中没有)。这是一个准备运行的代码:
import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl import load_workbook
wb = load_workbook('test.xlsx') # load as openpyxl workbook; useful to keep the original layout
# which is discarded in the following dataframe
df = pd.read_excel('test.xlsx') # load as dataframe (modifications will be easier with pandas API!)
ws = wb.active
df.iloc[1, 1] = 'hello world' # modify a few things
rows = dataframe_to_rows(df, index=False)
for r_idx, row in enumerate(rows, 1):
for c_idx, value in enumerate(row, 1):
ws.cell(row=r_idx, column=c_idx, value=value)
wb.save('test2.xlsx')
答案 2 :(得分:1)
以下是使用clipboard
的解决方案:
Platform2