当第一列为空时,Pandas 读取带有多个标题的 Excel 表

Ale*_*hán 4 python excel pandas

我有一个这样的excel表:

Excel表格

我想用 pandas read_excel 阅读它,我试过这个:

df = pd.read_excel("test.xlsx", header=[0,1])
Run Code Online (Sandbox Code Playgroud)

但它抛出了我这个错误:

ParserError: Passed header=[0,1] 对于这个 multi_index 的列来说行太多了

有什么建议?

Ore*_*shi 6

如果您不介意在阅读 Excel 后按摩 DataFrame,您可以尝试以下两种方法:

>>> pd.read_excel("/tmp/sample.xlsx", usecols = "B:F", skiprows=[0])
  header1 Unnamed: 1 Unnamed: 2 header2 Unnamed: 4
0    col1       col2       col3    col4       col5
1       a          0          x       3          d
2       b          1          y       4          e
3       c          2          z       5          f
Run Code Online (Sandbox Code Playgroud)

在上面,您必须修复 MultiIndex 的第一级,因为 header1 和 header2 是合并的单元格

>>> pd.read_excel("/tmp/sample.xlsx", header=[0,1], usecols = "B:F", 
skiprows=[0])
        header1      header2
header1    col1 col2    col3 col4
a             0    x       3    d
b             1    y       4    e
c             2    z       5    f
Run Code Online (Sandbox Code Playgroud)

在上面,通过跳过空行并仅解析包含数据的列 (B:F),它非常接近。如果你注意到了,列已经移动了......

注意不是一个干净的解决方案,只是想在帖子而不是评论中与您分享示例

-- 根据与 OP 的讨论进行编辑 --

根据 pandas read_excel 的文档header[1,2]正在为您的列创建一个 MultiIndex。看起来它DataFrame根据列 A 中填充的内容确定标签。因为那里什么都没有......索引有一堆Nan这样的

>>> pd.read_excel("/tmp/sample.xlsx", header=[1,2])
    header1           header2
       col1 col2 col3    col4 col5
NaN       a    0    x       3    d
NaN       b    1    y       4    e
NaN       c    2    z       5    f
Run Code Online (Sandbox Code Playgroud)

同样,如果您可以清理列并且 xlsx 的第一列始终为空白……您可以将其删除,如下所示。希望这就是你正在寻找的。

>>> pd.read_excel("/tmp/sample.xlsx", header[1,2]).reset_index().drop(['index'], level=0, axis=1)
  header1           header2
     col1 col2 col3    col4 col5
0       a    0    x       3    d
1       b    1    y       4    e
2       c    2    z       5    f
Run Code Online (Sandbox Code Playgroud)