Pandas Combining header rows error: too many values to unpack

Pandas Combining header rows error: too many values to unpack

我正在尝试遵循这个 Whosebug 问题的答案: 因为我有同样的需求。

我已将此数据放入 foobar.txt:

first,bar,baz,foo
second,one,two,three
A,1,2,3
B,8,9,10

我想创建一个如下所示的数据框:

    first-second bar-one baz-two foo-three
    A            1       2       3
    B            8       9       10

我正在关注链接问题的第一个答案,它使用列表理解,所以我的整个代码如下所示:

import pandas as pd
df = pd.read_csv(r'C:\Temp\foobar.txt')
df.columns = [f'{i}{j}' for i, j in df.columns]

但是,我得到一个 “太多值无法解包错误”:

Exception has occurred: ValueError
too many values to unpack (expected 2)
  File ".\test.py", line 32, in <listcomp>
    df.columns = [f'{i}{j}' for i, j in df.columns]
  File ".\test.py", line 32, in <module>
    df.columns = [f'{i}{j}' for i, j in df.columns]

我查看了其他人遇到相同错误的示例,我确定这是因为我有来自 df.columns 的 2 个以上的值,但我不确定如何解决这个问题,我也不明白为什么我上面链接的答案没有解决这个问题。

您必须通过指定 header 行来读取 CSV 以获得 MultiIndex

df = pd.read_csv(r'C:\Temp\foobar.txt', header=[0,1])

df.columns

MultiIndex([('first', 'second'),
            (  'bar',    'one'),
            (  'baz',    'two'),
            (  'foo',  'three')],
           )

df.columns = [f'{i}{j}' for i, j in df.columns]

df.columns

Index(['firstsecond', 'barone', 'baztwo', 'foothree'], dtype='object')