python DataFrame导出为excel

本文介绍了如何使用Python的pandas和xlsxwriter库进行Excel文件操作,包括ExcelWriter追加写入、创建多sheet以及如何在保存时保持公式功能。特别提到了ExcelWriter的使用方法,以及xlsxwriter用于分行分列存储的技巧,以及避免覆盖原文件的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导出数据最简便的方法就是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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值