如何将pandas列各唯一值对应数据写入同一Excel的不同工作表?
问题原因
- 分组使用的列名与实际数据集列名不匹配。你提供的数据集内存储日期的列名为
DATE INTERVAL,但代码中groupby使用的是DATE,如果没有提前对列名做重命名处理,分组操作会失效(严格运行会触发KeyError,如果你运行时没有报错,说明你之前的列名处理逻辑存在问题,把所有日期归到了同一个分组,最终仅生成一个工作表)。 - Excel工作表名称存在非法字符。你当前的日期格式为
日/月/年,包含字符/,而Excel工作表名称不允许使用/ \ ? * [ ]这类特殊字符,直接用原始日期作为工作表名会触发异常,部分场景下pandas会自动覆盖之前生成的工作表,最终只保留最后一个日期的内容。
修复方案
先对齐分组的列名,同时对工作表名称做非法字符替换即可,修复后代码如下:
with pd.ExcelWriter("combined_count.xlsx") as writer: # 替换为正确的日期列名做分组 for date, data in combined_count.groupby('DATE INTERVAL'): # 把日期中的/替换为-,符合Excel工作表命名规则 safe_sheet_name = str(date).replace('/', '-') # index=False表示不把pandas默认行索引写入Excel,不需要可以删除该参数 data.to_excel(writer, sheet_name=safe_sheet_name, index=False)
如果你习惯用DATE作为列名,也可以先重命名列再执行后续操作:
# 先把日期列重命名为DATE combined_count = combined_count.rename(columns={'DATE INTERVAL': 'DATE'}) with pd.ExcelWriter("combined_count.xlsx") as writer: for date, data in combined_count.groupby('DATE'): safe_sheet_name = str(date).replace('/', '-') data.to_excel(writer, sheet_name=safe_sheet_name, index=False)
内容的提问来源于stack exchange,提问作者RevolverOshawott
相关产品推荐
相关产品推荐

