在 Pandas 中使用多索引标题读取 excel 时选择列

Posted

技术标签:

【中文标题】在 Pandas 中使用多索引标题读取 excel 时选择列【英文标题】:Select columns when reading excel with multiindex header in Pandas 【发布时间】:2020-01-29 17:12:54 【问题描述】:

我有一个看起来像这样的 excel 表,我想将其作为多索引 Pandas 数据框阅读:

想要的结果:

       M1        M2     
site conc   LQ conc   LQ
C1 A    1  0.5   10  0.5
   B    2  0.6    5  0.6
   C  <LQ  1.0   14  1.0
C2 A  <LQ  1.1   12  1.1
   C    3  0.5   14  0.5
   D    1  0.5   11  0.5

以下代码用于产生所需的结果:

df = pd.read_excel("test.xlsx", 
                   sheet_name="test",
                   header=[1,2],
                   index_col=[0,1],
                   usecols='A:B,D:G',
                   parse_dates = False,
                   )

但现在(pandas 版本 0.25.1)它会产生以下错误:

ValueError: cannot specify usecols when specifying a multi-index header

有什么简单的解决办法吗?

重现excel表格:

;;start;M1;;M2;;end;M1;;M2;
cam;site;bla;conc;LQ;conc;LQ;bla;conc;LQ;conc;LQ
C1;A;bla;1;0.5;10;0.5;bla;1;0.5;10;0.5
C1;B;bla;2;0.6;5;0.6;bla;2;0.6;5;0.6
C1;C;bla;<LQ;1;14;1;bla;<LQ;1;14;1
C2;A;bla;<LQ;1.1;12;1.1;bla;<LQ;1.1;12;1.1
C2;C;bla;3;0.5;14;0.5;bla;3;0.5;14;0.5
C2;D;bla;1;0.5;11;0.5;bla;1;0.5;11;0.5

【问题讨论】:

您是否尝试从参数列表中删除usecols 我放大了我的 MWE 来说明对“usecols”的需求 【参考方案1】:

您好,我遇到了同样的问题,当headers 是多重索引时,您不能使用usecols

我通过这样做解决了这个问题:

df = pd.read_excel("test.xlsx",
                   sheet_name="test",
                   header=2,
                   index_col=[0,1],
                   usecols='A:B,D:G',
                   parse_dates=False)
index = pd.read_excel("test.xlsx",
                      sheet_name="test",
                      header=None,
                      skiprows=1,
                      index_col=[0,1],
                      nrows=2,
                      usecols='A:B,D:G',
                      parse_dates=False)
index = index.fillna(method='ffill', axis=1)
df.columns = pd.MultiIndex.from_arrays(index.values)
df

【讨论】:

以上是关于在 Pandas 中使用多索引标题读取 excel 时选择列的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python/Pandas 将多索引数据写入 excel 文件

Pandas,使用 merge_cells=False 从 excel 恢复多索引

将数据分组到 Pandas 多索引

在写入Excel时,“解析”一个pandas多索引

多索引上的熊猫数据框 groupby

以长格式保存具有不同级别名称的多索引列 Pandas 为 excel 格式