熊猫中的多级标头问题

时间:2020-05-25 18:59:15

标签: python pandas

我正在读取具有以下结构的excel文件-

Input excel file

并使用以下代码-

df = pd.read_excel("Myfile.xlsx", header=[0,1]) 
print(df.columns.ravel())

我希望输出应该像

[('Unnamed: 0_level_0', 'Id') ('Name', 'First Name')
 ('Name', 'Middle name') ('Name', 'Last name') ('Unnamed: 1_level_0', 'Age')
 ('Unnamed: 2_level_0', 'Email') ('Unnamed: 3_level_0', 'Phone') ('Address', 'House NO')
 ('Address', 'Street') ('Address', 'City') ('Address', 'State')
 ('Address', 'PIN')]

但是我得到的是-

[('Unnamed: 0_level_0', 'Id') ('Name', 'First Name')
 ('Name', 'Middle name') ('Name', 'Last name') ('Name', 'Age')
 ('Name', 'Email') ('Name', 'Phone') ('Address', 'House NO')
 ('Address', 'Street') ('Address', 'City') ('Address', 'State')
 ('Address', 'PIN')]

任何人都有线索,为什么我无法获得所需的输出,或者它是所需的?由于中间的列(“年龄”,“电子邮件和电话”)不是“名称”(“ 0级”列)的一部分,因此显示的内容不正确。有解决这个问题的线索吗?

1 个答案:

答案 0 :(得分:0)

我能够对此进行复制。我的猜测是,pandas没有考虑列(名称,地址)是否已合并,并假设这些列代表下方和右侧的单元格。

docs中没有提供任何原因(请参见index_label)。

这很有意义,假设您有一张看起来像这样的工作表:

HEADER1        HEADER2
Val1,Val2,Val3,Val4,Val5,Val6

前三个Val看起来像属于HEADER1。在您的屏幕截图中,它们显然没有。由于 Unnamed:0_level_0 有点“未定义”,他们可以逃避说标签有些不确定,但是它们应该像合并屏幕截图那样处理合并单元格的情况,因为它看起来像错误。

您可以尝试做的另一件事是在“未命名”列中放置一个空白的''空格,以将其强制为未标记。可能还有其他解决方法。