如何避免pd.MultiIndex自动填充缺失值?自定义填充方案咨询
解决pandas读取Excel多级索引时自动填充空值的问题
我明白你遇到的困扰了——用pd.read_excel指定多级索引时,pandas会自动把上一行的非空索引值填充到当前行的空索引位置,这完全打乱了你想要保留原始空值或自定义填充的需求。别担心,这里有两种实用的解决方法:
方法1:保留原始空值(NaN)
先把数据读取为普通列,保留原始空值后再手动设置多级索引:
- 读取数据时不指定
index_col,让前两列作为普通列加载:
df = pd.read_excel("C:\\Users\\Desktop\\test.xlsx", sheet_name='Feuil1', header=[0], merge_cells=False)
注:如果你的空值是Excel合并单元格导致的,一定要加上merge_cells=False,否则pandas会自动填充合并单元格的内容,无法保留空值。
- 将前两列设置为多级索引:
# 用列索引指定要设为索引的列,这种方式更通用,不受表头名称影响 df = df.set_index([df.columns[0], df.columns[1]])
这样处理后,原来的空索引位置会保留为NaN,不会被自动填充。
方法2:自定义填充空值
如果你想把空索引替换成自定义内容(比如"Unspecified"),可以在设置索引前先处理空值:
- 同样先读取数据(带
merge_cells=False):
df = pd.read_excel("C:\\Users\\Desktop\\test.xlsx", sheet_name='Feuil1', header=[0], merge_cells=False)
- 替换第二列(二级索引列)的空值为自定义值:
# 用列索引定位二级索引列,替换空值 df[df.columns[1]] = df[df.columns[1]].fillna("Unspecified")
- 设置多级索引:
df = df.set_index([df.columns[0], df.columns[1]])
为什么原来的方法会自动填充?
当你在read_excel中直接指定index_col=[0,1]时,pandas默认会启用索引向前填充的逻辑——它会认为Excel里的空索引是“继承”上一行的索引值,所以自动填充。而先读取为普通列,就能绕过这个默认行为,完全掌控空值的处理方式。
内容的提问来源于stack exchange,提问作者Charles R
相关产品推荐
相关产品推荐

