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

如何将Pandas Series索引中的NaN替换为'Test'?rename方法无效求助

解决Pandas Series索引中NaN无法通过rename替换的问题

问题原因

你尝试的三种rename写法都失效,核心原因是Pandas的rename()默认按标签精确匹配,但np.nan是特殊值,它不等于自身,另外:

  • 原数据中的None在Pandas会被自动转为np.nan,所以{None: 'Test'}匹配不到索引里的np.nan
  • {'NaN': 'Test'}是匹配字符串'NaN',和实际的缺失值np.nan完全不是同一元素
  • {np.nan: 'Test'}因为np.nan != np.nan的特性,精确匹配无法生效

有效解决方案

方案1:直接填充索引中的NaN

使用index.fillna()可以直接将索引里的所有缺失值替换为指定值:

df_sfdr = df_fonds.groupby('Article', dropna=False)['ActifEur'].sum()
df_sfdr.index = df_sfdr.index.fillna('Test')

方案2:用lambda函数结合pd.isna()检测替换

通过rename()的函数参数,对每个索引值做判断,匹配缺失值就替换:

import pandas as pd

df_sfdr = (df_fonds
           .groupby('Article', dropna=False)['ActifEur'].sum()
           .rename(lambda idx: 'Test' if pd.isna(idx) else idx)
)

方案3:分组前先处理原数据的缺失值

如果允许提前修改原数据,可以先把Article列的NaN替换为'Test',再分组:

df_fonds['Article'] = df_fonds['Article'].fillna('Test')
df_sfdr = df_fonds.groupby('Article')['ActifEur'].sum()

验证结果

执行上述任意方案后,你的索引会变成:

Article
Article 6    500
Article 8    100
Article 9    120
Test         10
Name: ActifEur, dtype: float64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:55:09