导出数据最简便的方法就是dataframe.to_excel()或to_csv()。但这种方法的缺点在于excel只有一个sheet,每次生成同名文件会覆盖原有文件,且数量较多时比较难看,用excel writter会更清晰。
目前网上一共有两种保存到sheet的方法,方法1:用pandas自带包ExcelWriter。
import pandas as pd
data = pd.DataFrame([1])
data2 = pd.DataFrame([2])
with pd.ExcelWriter('test.xlsx') as writer:
data.to_excel(writer, sheet_name='data')
data2.to_excel(writer, sheet_name='data2')
# 或者用如下写法
writer = pd.ExcelWriter('test.xlsx')
data.to_excel(writer, sheet_name='data')
data2.to_excel(writer, sheet_name='data2')
# 保存图片,新建一个sheet
sheet = writer.book.add_worksheet('pictures')
# 插入图片
sheet.insert_image('A1','../xxx.jpg')
# 最后保存
writer.save()
writer.close()
# 在不用with语句时需要用writer.close()
方法2:用xlsxwriter包。这个包可以在excel分行、分列存入。
import xlsxwriter
workbook = xlsxwriter.Workbook('hello.xlsx') # 建立文件
worksheet = workbook.add_worksheet()
# 建立sheet, 可以work.add_worksheet('employee')来指定sheet名,但中文名会报UnicodeDecodeErro的错误
worksheet.write('A1', 'Hello world') # 向A1写入
workbook.close()
以上导出方法都会覆盖原表格。
方法3:追加写入,利用xlutils的复制功能实现追加,但仅适用于.xls结尾的文件类型,且原表格中的公式也会消失,因此还是需要一个个写入才可以保留公式。
import xlrd
import xlutils.copy
data = xlrd.open_workbook('test.xls')
ws = xlutils.copy.copy(data)
table=ws.get_sheet(0)
table.write(0,5,'append')
ws.save('test.xls')
方法4:用openpyxl读取并写入公式,可以实现在已有文件上修改。openpyxl读入文件会有两套值,data_only=True和data_only=False分别是只包含值和只包含公式,因此若要值需要先保存文件,或者用win32com虚拟点开保存excel。
from openpyxl import Workbook, load_workbook
workbook = load_workbook('try.xlsx', data_only=False)
sheet = workbook['sheet2']
print(sheet.cell(row=5, column=1).value)
sheet.cell(row=6,column=1).value = "=SUM(A1:A4)"
workbook.save('try.xlsx')