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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:15:49