pandas 从xls导入在Jupyter notebook中组合多个具有相似名称的列

hgc7kmma  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(91)

我从Excel工作表中引入调查数据,其中有多个列在Excel工作表中具有相同的标题,当我将它们导入到我的数据框中时,它们被重新格式化为value.1,value.2,value.3等。
我一直在尝试将dataframe从宽格式更改为长格式,但变量名不会合并值,因此我将每个变量作为新的值名。
此外,我必须指定转换中的所有值名称,这很繁琐,因为现在有40多个变量。

import pandas as pd
    
# create a dataframe with an x, x.1, and y, y.2 column
df = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'x.1': [1, 2, 3, 4, 5], 'y': [1, 2, 3, 4, 5], 'y.1': [1, 2, 3, 4, 5],})

# add an id column
df['id'] = df.index

# change from wide to long format using melt
df = pd.melt(df, id_vars=['id'], value_vars=['x', 'x.1', 'y', 'y.1'], var_name='variable', value_name='value')
print(df)

我得到这个输出的地方

id variable  value
0    0        x      1
1    1        x      2
2    2        x      3
3    3        x      4
4    4        x      5
5    0      x.1      1
6    1      x.1      2
7    2      x.1      3
8    3      x.1      4
9    4      x.1      5
10   0        y      1
11   1        y      2
12   2        y      3
13   3        y      4
14   4        y      5
15   0      y.1      1
16   1      y.1      2
17   2      y.1      3
18   3      y.1      4
19   4      y.1      5

但我想要的是像这样收集值:

id variable  value
0    0        x      1
1    1        x      2
2    2        x      3
3    3        x      4
4    4        x      5
5    0        x      1
6    1        x      2
7    2        x      3
8    3        x      4
9    4        x      5
10   0        y      1
11   1        y      2
12   2        y      3
13   3        y      4
14   4        y      5
15   0        y      1
16   1        y      2
17   2        y      3
18   3        y      4
19   4        y      5

我该怎么做?理想情况下,当我融化 Dataframe 时,我不必有一个超长的列表

mw3dktmi

mw3dktmi1#

正如注解中提到的,如果您使用str.replace预处理列名以删除.0后缀,则这很容易:

out = (df
   .set_axis(df.columns.str.replace(r'\.\d+', '', regex=True), axis=1)
   .melt(['id'],
         var_name='variable', value_name='value', # not needed
        )
)
  • 请注意,如果这个集合与id_vars互补,则不需要指定value_varsvar_name='variable'/value_name='value'是默认值,因此也不需要。*

输出:

id variable  value
0    0        x      1
1    1        x      2
2    2        x      3
3    3        x      4
4    4        x      5
5    0        x      1
6    1        x      2
7    2        x      3
8    3        x      4
9    4        x      5
10   0        y      1
11   1        y      2
12   2        y      3
13   3        y      4
14   4        y      5
15   0        y      1
16   1        y      2
17   2        y      3
18   3        y      4
19   4        y      5

regex demo

相关问题