如何用Pandas按代码分组并将各组存入Excel不同工作表?
解决Pandas分组数据存入独立Excel工作表的问题
嘿,我懂你遇到的麻烦了——原代码里每次循环调用to_excel都会直接覆盖整个Excel文件,最后自然只剩最后一个DataFrame,而且还没法给工作表命名对吧?别担心,用pd.ExcelWriter就能完美解决这个问题,它允许我们在同一个文件里多次写入不同的工作表,还能自定义每个工作表的名称。
问题根源
你原来的循环代码:
for i in list_dfs: i.to_excel('output.xlsx')
每次执行to_excel都会重新创建output.xlsx,覆盖之前的内容,所以最后只有最后一个DataFrame被保留,而且默认工作表名是Sheet1,没法对应到pc_code_last_4的值。
正确解决方案
我们可以用ExcelWriter作为写入容器,遍历每个唯一的pc_code_last_4值,筛选对应数据后写入以该值命名的工作表:
import pandas as pd # 读取原始数据 fss_infile = pd.ExcelFile('Report.xlsx') lvl_1 = fss_infile.parse(sheet_name='Lvl 1') # 使用ExcelWriter批量写入工作表 with pd.ExcelWriter('output.xlsx') as writer: # 遍历每个唯一的pc_code_last_4值 for code_val in lvl_1['pc_code_last_4'].unique(): # 筛选当前code对应的数据 filtered_df = lvl_1.loc[lvl_1['pc_code_last_4'] == code_val, :] # 将数据写入以code_val命名的工作表,index=False去掉默认索引列(可选) filtered_df.to_excel(writer, sheet_name=str(code_val), index=False)
额外说明
with语句会自动帮我们管理ExcelWriter的打开和关闭,不用手动调用writer.close(),更安全省心。sheet_name=str(code_val)确保工作表名是字符串格式(如果pc_code_last_4是数字的话,Excel要求工作表名必须是字符串)。- 如果你已经提前生成了
list_dfs,也可以搭配zip同时遍历值和对应的DataFrame:unique_codes = lvl_1['pc_code_last_4'].unique() list_dfs = [lvl_1.loc[lvl_1['pc_code_last_4']==val, :] for val in unique_codes] with pd.ExcelWriter('output.xlsx') as writer: for code_val, df in zip(unique_codes, list_dfs): df.to_excel(writer, sheet_name=str(code_val), index=False)
这样执行后,你就能得到一个包含所有分组数据的Excel文件,每个工作表都以对应的pc_code_last_4值命名啦!
内容的提问来源于stack exchange,提问作者tomoc4
相关产品推荐
相关产品推荐

