我有这样的excel表:
我想用pandas read_excel阅读它,我尝试了这个:
df = pd.read_excel("test.xlsx", header=[0,1])
但它却抛出了这个错误:
ParserError:Passed header = [0,1]这个multi_index列的行数太多
有什么建议吗?
答案 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_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
再次,如果您可以清理列,并且如果xlsx的第一列始终为空白......您可以像下面一样删除它。希望这是你正在寻找的。 p>
>>> 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)
Here是header
参数的文档:
用于解析的DataFrame的列标签的行(0索引)。如果传递整数列表,那么这些行位置将组合成一个MultiIndex。如果没有标题,请使用“无”。
我认为以下内容应该有效:
df = pd.read_excel("test.xlsx", skiprows=2, usecols='B:F', header=0)