pd.read_excel()读取单层MultiIndex时异常问题咨询
问题:读取带多层索引的Excel文件时索引解析异常
最小可复现代码
import pandas as pd I = range(2) C = range(2) mi_i = pd.MultiIndex.from_product([I], names=['i']) mi_c = pd.MultiIndex.from_product([C], names=['c']) df = pd.DataFrame(0, index=mi_i, columns=mi_c) df.to_excel('df.xlsx') df_in = pd.read_excel('df.xlsx', index_col=0, header=0)
预期与实际结果
- 原始DataFrame
df的输出:
c 0 1 i 0 0 0 1 0 0
- 读取Excel后得到的
df_in异常结果:
0 1 c i NaN NaN 0 0.0 0.0 1 0.0 0.0
解决方案
问题核心是读取时未正确识别列的多层索引:
- 写入Excel时,多层列索引会被拆分为两行(第一行是索引名
c,第二行是索引值0、1) - 设置
header=0仅取第一行作为表头,导致第二行的索引值被误判为数据行,同时原始行索引也被错误解析。
修正方式是读取时指定header=[0,1],告知pandas用前两行构建列的多层索引:
df_in = pd.read_excel('df.xlsx', index_col=0, header=[0,1])
执行后df_in的输出将与原始df完全一致:
c 0 1 i 0 0 0 1 0 0
若要进一步避免Excel合并单元格可能带来的解析问题,写入时可添加merge_cells=False参数:
df.to_excel('df.xlsx', merge_cells=False)
内容的提问来源于stack exchange,提问作者clueless
相关产品推荐
相关产品推荐

