pandas to_excel如何突破65535的长度限制?

本文介绍如何在Pandas DataFrame处理后,通过设置`engine='openpyxl'`参数避免Excel文件长度限制,保持多级index的美观格式。遇到长度超过限制时,只需调整engine并继续导出。

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

问题描述

有时候,我们对数据表做了groupby、set_index设置多级目录后,就会想把DataFrame的格式导出成Excel格式,而非csv格式。因为导出成csv格式,可能多级index的格式就会消失,当你要输出个漂亮的格式给人看的时候,csv显然是不如excel好看的。

不过,excel格式还有个蛋疼的缺点,那就是单个excel文件输出长度65535的限制。假如你的excel文件超长了,你大概会得到以下报错:

~/anaconda3/lib/python3.6/site-packages/xlwt/Worksheet.py in write_merge(self, r1, r2, c1, c2, label, style)
   1111     def write_merge(self, r1, r2, c1, c2, label="", style=Style.default_style):
   1112         assert 0 <= c1 <= c2 <= 255
-> 1113         assert 0 <= r1 <= r2 <= 65535
   1114         self.write(r1, c1, label, style)
   1115         if c2 > c1:

AssertionError: 

 也可能是这样的报错:

ValueError: This sheet is too large! Your sheet size is: ..., ... Max sheet size is: 1048576, 16384

问题解决

很简单 ,在to_excel中加一个参数即可:

df.to_excel('test.xls', engine='openpyxl')

注意engine参数,设置该值为’openpyxl’,即可忽略pandas输出excel的文件长度限制了

### 修正后的Python代码 为了确保能够正确遍历列表并将符合条件的`DataFrame`行保存为单独的Excel文件,以下是经过修改和完善后的代码: ```python import os import pandas as pd # 假设list_of_centers是一个包含支撑中心名称的列表 for center in list_of_centers: if pd.notna(center): # 使用pandas内置函数判断是否为空值 filtered_df = df1[df1['支撑中心'] == center] if not filtered_df.empty: # 防止空的数据框被写出 file_path = os.path.join(address1, f"{center}.xlsx") # 构建正确的路径字符串 with pd.ExcelWriter(file_path) as writer: filtered_df.to_excel(writer, index=False) ``` 上述代码做了以下几个方面的改进[^1]: - 将循环变量名改为更具描述性的`center`; - 利用`pd.notna()`来替代原始代码中的`str(i) != 'nan'`,这是一种更可靠的方式去检测缺失值; - 添加了一个额外检查以确认过滤后的数据帧不为空再执行写操作; - 改进了文件路径拼接方式,采用`os.path.join()`以及f-string格式化字符串构建目标文件路径。 ### 处理多个工作表的情况 如果希望在一个Excel文件中创建多张工作表而不是生成多个独立文件,则可调整策略如下所示: ```python with pd.ExcelWriter('output.xlsx') as writer: for center in list_of_centers: if pd.notna(center): sheet_name = str(center)[:31] # Excel单个工作表名字长度限制为31字符以内 df_center = df1[df1['支撑中心'] == center] if not df_center.empty: df_center.to_excel(writer, sheet_name=sheet_name, index=False) ``` 此版本会在名为`output.xlsx`的一个文件里按不同支撑中心分别建立相应的工作表[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_illusion_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值