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

时间:2018-05-22 16:42:44

标签: python excel pandas

我有这样的excel表:

Excel sheet

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

df = pd.read_excel("test.xlsx", header=[0,1])

但它却抛出了这个错误:

  

ParserError:Passed header = [0,1]这个multi_index列的行数太多

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您在阅读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

在上面,你必须修复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

在上面,它通过跳过空行并仅使用数据解析列(B:F)而非常接近。如果你注意到,那些列已经转移了......

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

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

Based on documentation for pandas read_excelheader[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

再次,如果您可以清理列,并且如果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

答案 1 :(得分:1)

Hereheader参数的文档:

  

用于解析的DataFrame的列标签的行(0索引)。如果传递整数列表,那么这些行位置将组合成一个MultiIndex。如果没有标题,请使用“无”。

我认为以下内容应该有效:

df = pd.read_excel("test.xlsx", skiprows=2, usecols='B:F', header=0)