添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我们之前的案例讲过如何用pandas按行拆分Excel,批量将一个Excel拆分多个Excel,这次我们按列完成拆分。

数据与需求

我们读取我们的demo数据Excel,并修改表头,将后边的列名修改为两组相同的:

import pandas as pd
df = pd.read_excel('https://www.gairuo.com/file/data/team.xlsx')
df = df.head()
df.columns = ['name'] + ['foo']*2 + ['bar']*3
    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')
       foo  foo  bar  bar  bar
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://www.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。

这样就完成了这个需求。

  • pandas 实战案例集 2023-02-21 19:37:27
  • pandas 文件或数据的读取和导出 2022-01-22 14:33:56
  • pandas groupby() 创建分组对象 2022-04-29 21:52:43
  •