You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免pd.MultiIndex自动填充缺失值?自定义填充方案咨询

解决pandas读取Excel多级索引时自动填充空值的问题

我明白你遇到的困扰了——用pd.read_excel指定多级索引时,pandas会自动把上一行的非空索引值填充到当前行的空索引位置,这完全打乱了你想要保留原始空值或自定义填充的需求。别担心,这里有两种实用的解决方法:


方法1:保留原始空值(NaN)

先把数据读取为普通列,保留原始空值后再手动设置多级索引:

  1. 读取数据时不指定index_col,让前两列作为普通列加载:
df = pd.read_excel("C:\\Users\\Desktop\\test.xlsx", sheet_name='Feuil1', header=[0], merge_cells=False)

注:如果你的空值是Excel合并单元格导致的,一定要加上merge_cells=False,否则pandas会自动填充合并单元格的内容,无法保留空值。

  1. 将前两列设置为多级索引:
# 用列索引指定要设为索引的列,这种方式更通用,不受表头名称影响
df = df.set_index([df.columns[0], df.columns[1]])

这样处理后,原来的空索引位置会保留为NaN,不会被自动填充。


方法2:自定义填充空值

如果你想把空索引替换成自定义内容(比如"Unspecified"),可以在设置索引前先处理空值:

  1. 同样先读取数据(带merge_cells=False):
df = pd.read_excel("C:\\Users\\Desktop\\test.xlsx", sheet_name='Feuil1', header=[0], merge_cells=False)
  1. 替换第二列(二级索引列)的空值为自定义值:
# 用列索引定位二级索引列,替换空值
df[df.columns[1]] = df[df.columns[1]].fillna("Unspecified")
  1. 设置多级索引:
df = df.set_index([df.columns[0], df.columns[1]])

为什么原来的方法会自动填充?

当你在read_excel中直接指定index_col=[0,1]时,pandas默认会启用索引向前填充的逻辑——它会认为Excel里的空索引是“继承”上一行的索引值,所以自动填充。而先读取为普通列,就能绕过这个默认行为,完全掌控空值的处理方式。

内容的提问来源于stack exchange,提问作者Charles R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:26:55