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

Pandas:为DataFrame填充缺失值的最优方法

高效替换DataFrame中指定缺失值的方法

嘿,我来给你分享几个简洁高效的方案,完全不用循环迭代,和R里的简便操作异曲同工!

首先先还原你的场景:

import pandas as pd
df = pd.DataFrame([[1,3,'NA',2], [0,1,1,3], [1,2,'NA',1]], columns=['W', 'X', 'Y', 'Z'])
print(df)

这个DataFrame里的Y列有两个字符串'NA'作为缺失值,你已经得到了对应的插补值to_impute = [2,1],下面是两种避开循环的最优解法:

方法1:布尔索引直接赋值(最直接高效)

这是最推荐的方式,利用pandas的向量化特性,一行代码就能搞定:

to_impute = [2,1]
# 定位Y列等于'NA'的行,直接赋值插补值
df.loc[df['Y'] == 'NA', 'Y'] = to_impute

原理很简单:df['Y'] == 'NA'会生成一个布尔序列,精准标记出需要替换的行;loc索引器可以直接定位这些行的Y列,然后把to_impute列表赋值过去——pandas会自动按顺序将列表中的值对应到目标行,完全不需要手动循环。

方法2:先转换为标准缺失值再填充(适合后续统一处理)

如果之后还需要对其他缺失值做统一操作,可以先把字符串'NA'转换为pandas标准的缺失值pd.NA,再用指定值填充:

# 第一步:将字符串'NA'转为标准缺失值
df['Y'] = df['Y'].replace('NA', pd.NA)
# 第二步:针对缺失的行,用to_impute填充
df['Y'] = df['Y'].fillna(pd.Series(to_impute, index=df[df['Y'].isna()].index))

这种方法的好处是统一了缺失值的格式,方便后续用pandas的缺失值处理工具(比如dropna、interpolate等)操作,不过对于当前的需求来说,方法1更直接。

这两种方法都是向量化操作,比循环iloc赋值效率高得多,尤其是当数据量很大的时候,性能差距会非常明显,而且代码简洁易读,完全符合你想要的简洁风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:37:53