如何将DataFrame指定列中的NaN值替换为列内非空有效值?
问题描述
现有如下DataFrame:
col_1 col_2 col_3 0 a a_1 XYZ 1 b b_1 XYZ 2 c c_1 XYZ 3 d d_1 NaN 4 e e_1 NaN 5 f f_1 NaN
其中col_3仅包含NaN和XYZ两种值,需要将该列中的NaN替换为非空值XYZ,预期结果如下:
col_1 col_2 col_3 0 a a_1 XYZ 1 b b_1 XYZ 2 c c_1 XYZ 3 d d_1 XYZ 4 e e_1 XYZ 5 f f_1 XYZ
尝试过replace、loc、fillna等方法但未成功,求解决方案。
解决方案
以下几种方法均可实现需求,可根据实际情况选择:
方法1:直接用fillna填充固定值
既然明确非空值为XYZ,直接调用fillna填充即可:
df['col_3'] = df['col_3'].fillna('XYZ')
若之前用fillna失败,大概率是未将结果重新赋值给原列,或者列中的“NaN”是字符串类型而非标准pandas缺失值。可以先检查值类型:
print(df['col_3'].unique())
如果输出包含'NaN'字符串,需先转成标准缺失值再填充:
import numpy as np df['col_3'] = df['col_3'].replace('NaN', np.nan).fillna('XYZ')
方法2:用replace精准替换缺失值
直接指定替换规则:
import numpy as np df['col_3'] = df['col_3'].replace(np.nan, 'XYZ')
如果是字符串'NaN',将np.nan替换为'NaN'即可。
方法3:loc定位缺失值赋值
通过布尔索引筛选出col_3的缺失行,直接赋值:
df.loc[df['col_3'].isna(), 'col_3'] = 'XYZ'
若为字符串'NaN',条件改为df['col_3'] == 'NaN'。
方法4:提取列内非空值通用填充
如果不确定非空值具体内容,可先提取列内非空唯一值再填充,适配值变动场景:
non_null_val = df['col_3'].dropna().unique()[0] df['col_3'] = df['col_3'].fillna(non_null_val)
内容的提问来源于stack exchange,提问作者gfernandes
相关产品推荐
相关产品推荐

