看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们之前的案例讲过如何用pandas按行拆分Excel,批量将一个Excel拆分多个Excel,这次我们按列完成拆分。
我们读取我们的demo数据Excel,并修改表头,将后边的列名修改为两组相同的:
import pandas as pd
df = pd.read_excel('https://gairuo.com/file/data/team.xlsx')
df = df.head()
df.columns = ['name'] + ['foo']*2 + ['bar']*3
df
'''
name foo foo bar bar bar
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
'''
现在需求是期望将这个Excel按列进行拆分为,每个Excel保留name列。
在案例 pandas 按分组一个分组导出一个文件中,我们是按行分组拆分Excel,本例思路类似,我们还是利用groupby()分组,不过按列分,需要传入axis=1。
为了保证拆分的Excel的首列为name,可将DataFrame的索引先设置为name列:
df = df.set_index('name')
df
'''
foo foo bar bar bar
name
Liver E 89 21 24 64
Arry C 36 37 37 57
Ack A 57 60 18 84
Eorge C 93 96 71 78
Oah D 65 49 61 86
'''
再按groupby()分组,按列需要传入axis=1,分组依据是列索引:
(
df.groupby(df.columns, axis=1)
.apply(lambda x: x.to_excel(f'{x.name}.xlsx'))
)
# 'Empty DataFrame\nColumns: []\nIndex: []'
可以到脚本当前的目录查看生成的两个excel文件:
如果在构造数据时,我们不修改列名,同时需求修改为将成绩和团队拆分,原数据是这样:
import pandas as pd
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
'''
我们可以设置手动分组并拆分导出:
# 修改索引
df = df.set_index('name')
# 设置手动分组并拆分导出
(
df.groupby(['team'] + ['Q']*4, axis=1)
.apply(lambda x: x.to_excel(f'{x.name}.xlsx'))
)
这样会生成两个文件:team.xlsx和Q.xlsx。
这样就完成了这个需求。
(无)
更新时间:2024-08-18 16:07:24 标签:pandas 导出 excel