看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们在日常办公时,需要将文件进行切分。比如,销售助理需要将一个客户名单按分配给的不同销售人员分成不同的 Excel 文件。接下来我们就实现 Python 按分组批量导出文件。
我们还是使用我们的测试数据集, 这个数据集的 team 字段就是分组依据:
import pandas as pd
# pandas 教程 gairuo.com/p/pandas
df = pd.read_excel('https://gairuo.com/file/data/team.xlsx')
df.head()
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
通过以上前五条数据,可以看到看到 team 为数据的分组,现在需求是将这个 Excel 拆分成若干个 Excel,每个 Excel 为其中一个组的数据。
面对分组问题,首先要将 df 用 groupby 分组,这样就会产生一个分组对象,每个分组是一个子 df,再对这个分组对象进行操作,将子 df 执行导出操作。
要实现批量操作,我们可以用 apply 调用数据导出函数。
接下来,我们看实现代码:
# 保存的文件名为分组的文件名
(
df.groupby('team') # 分组
# 保存导出 Excel
.apply(lambda d: d.to_excel(f'team-{d.name}.xlsx'))
)
其中,d.name 是分组 team 的取值。分组后的每个 子 DataFrame 的索引为 team 值,d.name 就是索引的取值。要特别注意的是,name 列是分组后的一个属性,不是原表中的 name 列,由于冲突,需要取 name 列时可按切片形式读取 d['name']。
这样就导出了所有文件,文件的命名也包含了分组名:
- dir/
- team-A.xlsx
- team-B.xlsx
- team-C.xlsx
- team-D.xlsx
- team-E.xlsx
- team-F.xlsx
以上导出的是 Excel 文件,如果想导出 CSV 文件,则可以使用 to_csv()
方法。
更新时间:2024-08-18 15:37:44 标签:pandas python 导出