Pandas的to_excel函数用于将Pandas数据输出,存储到excel文件中。Pandas作为Python数据分析的一个常用包,经常会与Excel交互,也经常会需要将数据导出为Excel格式,接下来本文将全面介绍to_excel函数的基础和注意事项。
官方文档链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html
语法
DataFrame.to_excel(excel_writer, *, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, inf_rep='inf', freeze_panes=None, storage_options=None, engine_kwargs=None)
参数详细解释如下:
- excel_writer:文件路径或现有的ExcelWriter。
- sheet_name:它是指包含DataFrame的工作表的名称。
- float_format:这是一个可选参数, 用于格式化浮点数字符串。例如参数设置为"%.2f"就会让0.1234显示为 0.12.
- header:写出列名。如果给出了字符串列表, 则假定它是列名的别名。
- index_label:引用索引列的列标签。如果未指定, 并且标头和索引为True, 则使用索引名称。如果DataFrame使用MultiIndex, 则应给出一个序列。
- startrow:数据起始行。默认值0。它指向转储DataFrame的左上单元格行。
- startcol:数据起始列。默认值0。它指向转储DataFrame的左上方单元格列。
- engine:这是一个可选参数, 用于写入要使用的引擎, openpyxl或xlsxwriter。
- merge_cells:布尔值, 其默认值为True。将层级索引对应的单元格合并。
- freeze_panes : 定义 Excel 冻结窗格的边界范围。例如,若指定最底行为第 5 行、最右列为第 3 列,就表示冻结第 1–5 行和第 1–3 列的区域。
- storage_options: 特定存储连接所需的额外配置项,例如主机地址、端口号、用户名、密码等。
- engine_kwargs:传递给 Excel 引擎的参数
to_excel函数用法
一、单个sheet写入
import pandas as pddf1 = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'], columns=['col 1', 'col 2'])df1.to_excel('excel1.xlsx', sheet_name='Sheet1', index=False) # index=false表示不写入索引
excel1.xlsx 不存在的话,则会新建文件,再写入 Sheet1。 excel1.xlsx 已存在的话,则会新建,写入,再覆盖。 所以无论 excel1.xlsx 是否存在,上述代码的结果是一样的。它的作用就是新建 excel1.xlsx(文件已存在则覆盖),写入 Sheet1。 如果代码中有多个dataframe,并且都使用这种写法,excel1.xlsx 中最后也只有一个表 Sheet1,不会有多个sheet。
二、多个sheet写入到同一个Excel
当Pandas要写入多个sheet时,to_excel第一个参数excel_writer要选择ExcelWriter对象,不能是文件的路径。否则,就会覆盖写入。
import pandas as pddf1 = pd.DataFrame({'One': [1, 2, 3]})df2 = pd.DataFrame({'Two': [4, 5, 6]})with pd.ExcelWriter('excel1.xlsx') as writer: df1.to_excel(writer, sheet_name='Sheet1', index=False) df2.to_excel(writer, sheet_name='Sheet2', index=False)
ExcelWriter可以看作一个容器,一次性提交所有to_excel语句后再保存,从而避免覆盖写入。
三、新增sheet,不覆盖已存在的sheet
沿用上面的代码,excel1.xlsx 已存在,增加一个新的表 Sheet3。这里,ExcelWriter的参数mode='a',模式改为新增,非写入('w')。 注意:这里模式的新增指的是sheet,不是对sheet的内容进行新增。
import pandas as pddf3 = pd.DataFrame({'Three': [7, 8, 9]})with pd.ExcelWriter('excel1.xlsx', mode='a') as writer: df3.to_excel(writer, sheet_name='Sheet3', index=False)
同样,新增两个sheety也是一样的操作
import pandas as pddf4 = pd.DataFrame({'Four': [11, 22, 33]})df5 = pd.DataFrame({'Five': [55, 66, 77]})with pd.ExcelWriter('excel1.xlsx', mode='a') as writer: df4.to_excel(writer, sheet_name='Sheet4', index=False) df5.to_excel(writer, sheet_name='Sheet5', index=False)
四、格式化浮点数和替换缺失值
如果DataFrame中包含浮点数或缺失值,我们可以使用float_format和na_rep参数进行格式化:
# 假设DataFrame中包含缺失值和浮点数df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, None, 35.5678],'Salary': [50000, 60000.1234, 70000]})# 格式化浮点数并替换缺失值df.to_excel('output.xlsx', sheet_name='Formatted', float_format='%.2f', na_rep='N/A')
五、自定义样式
虽然pd.to_excel()函数本身不提供直接的样式定制功能,但你可以使用openpyxl或xlsxwriter等库来在写入Excel文件后修改样式。以下是一个使用xlsxwriter的示例
# 使用xlsxwriter作为引擎并设置样式with pd.ExcelWriter('styled_output.xlsx', engine='xlsxwriter') as writer: df.to_excel(writer, sheet_name='StyledSheet', index=False)# 获取xlsxwriter对象以便进行样式设置 workbook = writer.book worksheet = writer.sheets['StyledSheet']# 创建一个格式对象并设置字体和边框 format = workbook.add_format({'bold': True, 'border': 1})# 应用格式到第一行的单元格 worksheet.set_row(0, None, format)