如何使用Pandas将DataFrame转换为指定格式的Excel文件(按唯一S_NAME拆分工作表)
Pandas: 将DataFrame按S_NAME拆分到Excel多个工作表
嘿,我来帮你搞定这个问题!你的需求其实很常见——把DataFrame按S_NAME的唯一值拆分到Excel的不同工作表里,之前的字典方法方向偏了(你之前的代码是把每一列的唯一值单独做成DataFrame,这和按S_NAME分组的需求不匹配),咱们来一步步实现正确的方案:
核心思路
我们需要按S_NAME对DataFrame进行分组,然后把每个分组的数据分别写入Excel文件的对应工作表中,这里要用到Pandas的groupby()方法和ExcelWriter工具。
完整实现代码
import pandas as pd # 1. 读取CSV数据(你的这部分是对的,因为CSV没有表头,所以用names指定列名) df = pd.read_csv('input.csv', sep=',', names=['S_NAME', 'S_ID', 'TYPE_NAME', 'TYPE_ID']) # 2. 创建ExcelWriter对象,用于写入多个工作表 with pd.ExcelWriter('output.xlsx') as writer: # 3. 按S_NAME分组,遍历每个分组 for s_name, group in df.groupby('S_NAME'): # 4. 将当前分组的数据写入以S_NAME命名的工作表 # 注意:这里设置index=False来避免写入默认的行索引,让输出更整洁 group.to_excel(writer, sheet_name=s_name, index=False)
代码细节解释
groupby('S_NAME'): 这一步会把原始DataFrame拆分成多个子DataFrame,每个子DataFrame对应一个唯一的S_NAME值。遍历的时候,s_name是分组的名称(比如"AD EXTRACT"),group就是对应的数据子集。pd.ExcelWriter: 这是Pandas专门用来处理多工作表Excel文件的工具,用with语句可以自动帮我们关闭文件,避免资源泄漏。to_excel(): 每个分组调用这个方法,把数据写入指定的工作表,sheet_name=s_name直接用S_NAME的值作为工作表名称,完全符合你的需求。
额外小提示
如果你的S_NAME里包含Excel工作表名不允许的字符(比如/、\、:等),可以提前对工作表名称做清洗,比如:
# 把非法字符替换成下划线,避免写入出错 clean_sheet_name = s_name.replace('/', '_').replace(':', '_').replace('\\', '_') group.to_excel(writer, sheet_name=clean_sheet_name, index=False)
内容的提问来源于stack exchange,提问作者Paulson Mathew
相关产品推荐
相关产品推荐

