Pandas 输出至excel详解 to_excel()及ExcelWriter()参数以及用法

这篇博客介绍了Pandas的DataFrame如何使用to_excel方法将数据导出到Excel文件,包括参数解析如excel_writer、sheet_name、na_rep等,并探讨了ExcelWriter如何在同一Excel文件中写入多个数据表。此外,还提到了编码、日期格式等选项,适合进行数据分析和报告编写时参考。

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

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, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

to_excel()参数:

  • excel_writer:文件路径或现有的ExcelWriter。
    
    例如,建一个writer:
    writer = pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace')
    
    其中mode 可以选择a或w, if_sheet_exists='replace',可以是'new'或'replace
    
    sheet_name:它是指包含DataFrame的工作表的名称。
    na_repr:缺少数据表示形式。
    float_format:这是一个可选参数, 用于格式化浮点数字符串。
    列:指要写入的列。
    header:写出列名。如果给出了字符串列表, 则假定它是列名的别名。
    index:写入索引。
    index_label:引用索引列的列标签。如果未指定, 并且标头和索引为True, 则使用索引名称。如果DataFrame使用MultiIndex, 则应给出一个序列。
    startrow:默认值0。它指向转储DataFrame的左上单元格行。
    startcol:默认值0。它指向转储DataFrame的左上方单元格列。
    engine:这是一个可选参数, 用于写入要使用的引擎, openpyxl或xlsxwriter。
    merge_cells:返回布尔值, 其默认值为True。它将MultiIndex和Hierarchical行写为合并的单元格。
    encoding:这是一个可选参数, 可对生成的excel文件进​​行编码。仅对于xlwt是必需的。
    inf_rep:它也是一个可选参数, 默认值为inf。它通常表示无穷大。
    详细:返回一个布尔值。它的默认值为True。
    它用于在错误日志中显示更多信息。
    Frozen_panes:它也是一个可选参数, 用于指定要冻结的最底部一行和最右边一列。

ExcelWriter()用法:

ExcelWriter():
可以向同一个excel的不同sheet中写入对应的表格数据,首先需要实例化一个writer对象,传入的主要参数为已存在容器表格的路径及文件名称.
用法为:

class pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', **engine_kwargs)

参数:
path:str
xls或xlsx文件的路径。

engine:str (可选参数)
用于编写的引擎。如果为无,则默认为io.excel.<extension>.writer。注意:只能作为关键字参数传递。

date_format:str, 默认为 None
格式字符串,用于写入Excel文件的日期(例如“ YYYY-MM-DD”)。

datetime_format:str, 默认为 None
写入Excel文件的日期时间对象的格式字符串。 (例如“ YYYY-MM-DD HH:MM:SS”)。

mode:{‘w’, ‘a’}, 默认为 ‘w’
要使用的文件模式(写或追加)。

0.24.0版中的新功能。

注意:
所有方法和属性均未视为公开。

为了与CSV编写器兼容,ExcelWriter在写入之前将列表和字典序列化为字符串。
### 正确关闭文件并执行打印与保存Excel操作的最佳实践 在 Python 中,`f.close()` 是用于显式关闭已打开的文件对象的操作。如果未正确关闭文件,则可能会导致资源泄漏或其他异常行为。然而,在实际开发中,推荐使用 `with` 语句来管理文件上下文,因为它可以自动处理文件的关闭操作。 以下是关于如何正确关闭文件以及执行打印和保存 Excel 操作的最佳实践: #### 使用 `with` 自动管理文件 通过 `with` 语句打开文件时,无论是否发生异常,都会确保文件被正确关闭。这种方式不仅简化了代码逻辑,还提高了程序的安全性和可维护性[^3]。 ```python filepath = 'D:/filename.txt' with open(filepath, 'r', encoding='utf-8') as f: # 显式指定编码为 utf-8 lines = f.readlines() for line in lines: print(line.strip()) # 移除多余的换行符后再打印 ``` 上述代码片段展示了如何安全地读取文件内容,并逐行打印每一行的数据。由于使用了 `with` 语句,因此无需手动调用 `f.close()` 来关闭文件。 --- #### 处理 Unicode 编码问题 当遇到 txt 文件编码为 Unicode 或 ASCII 格式的情况时,建议在读取前确认其具体的编码方式,并将其转换为目标编码(如 UTF-8)。可以通过第三方库(如 `chardet`)检测文件的实际编码。 安装依赖: ```bash pip install chardet ``` 检测编码并重新加载文件: ```python import chardet with open(filepath, 'rb') as raw_data: result = chardet.detect(raw_data.read()) encoding = result['encoding'] or 'utf-8' # 使用检测到的编码重载文件 with open(filepath, 'r', encoding=encoding) as f: content = f.read() print(content) ``` 此方法能够有效避免因编码不匹配而导致的内容为空的问题。 --- #### 导出 DataFrame 到 Excel 并优化列宽 为了将 Pandas 的 DataFrame 数据导出至 Excel 表格,并调整表格中的列宽以适应数据长度,可以结合 `openpyxl` 库实现自动化设置功能[^1]。 示例代码如下: ```python import pandas as pd from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows # 创建示例 DataFrame df = pd.DataFrame({ 'Column1': ['Short text', 'Longer piece of information'], 'Column2': [10, 20], }) # 定义函数以自定义调整 Excel 列宽 def autosize_excel_columns_df(worksheet, df, offset=0): for idx, col in enumerate(df.columns): max_length = max( df[col].astype(str).map(len).max(), # 计算该列的最大字符串长度 len(col) # 考虑列名本身的宽度 ) worksheet.column_dimensions[chr(65 + idx)].width = max_length + offset # 将 DataFrame 写入 Excel 工作簿 wb = Workbook() ws = wb.active for r in dataframe_to_rows(df, index=False, header=True): ws.append(r) autosize_excel_columns_df(ws, df, offset=2) # 设置偏移量为 2 # 保存工作簿 output_path = 'example_output.xlsx' wb.save(output_path) print(f"Excel file saved at {output_path}") ``` 在此过程中,`autosize_excel_columns_df` 函数会动态计算每列所需的最佳宽度,并应用到目标 Excel 表格上。 --- #### 结合多个 Sheet 进行多表存储 对于需要在一个 Excel 文件中创建多个工作表的需求,可以直接利用 `pandas.ExcelWriter` 提供的功能完成这一任务[^2]。 示例代码如下: ```python df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]}) with pd.ExcelWriter('multi_sheets_example.xlsx') as writer: df1.to_excel(writer, sheet_name='Sheet1') df2.to_excel(writer, sheet_name='Sheet2') print("Multiple sheets written successfully.") ``` 以上代码会在同一个 Excel 文件中分别生成两个独立的工作表 `Sheet1` 和 `Sheet2`,从而满足复杂场景下的需求。 --- ### 总结 最佳实践中应优先考虑使用 `with` 上下文管理器替代传统的 `f.open()` 和 `f.close()` 组合;针对特殊编码格式的文本文件需提前解析其真实编码再做进一步处理;最后借助 Pandas 及 Openpyxl 等工具链高效完成数据分析与可视化任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ddxn417

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值