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

如何用DataFrame对应ColumnA的值替换ColumnB中的nan?

问题:替换DataFrame中NaN值为对应行另一列的值

原始DataFrame:

ColumnAColumnB
1nan
220
350
4nan
5nan
6100
71
82

需要将ColumnB中的NaN值替换为对应行ColumnA的值,得到目标DataFrame:

ColumnAColumnB
11
220
350
44
55
6100
71
82

之前尝试用if语句仅替换了第一个值,以下是高效的解决方案:


解决方案

方法1:使用fillna()(最简洁推荐)

pandas的fillna()方法可直接批量填充NaN值,指定用ColumnA的对应值填充ColumnB:

import pandas as pd
import numpy as np

# 构造原始数据
df = pd.DataFrame({
    'ColumnA': [1,2,3,4,5,6,7,8],
    'ColumnB': [np.nan,20,50,np.nan,np.nan,100,1,2]
})

# 执行替换
df['ColumnB'] = df['ColumnB'].fillna(df['ColumnA'])

方法2:使用mask()明确指定替换条件

通过mask()标记需要替换的位置(ColumnB为NaN时),替换为ColumnA的值:

df['ColumnB'] = df['ColumnB'].mask(pd.isna(df['ColumnB']), df['ColumnA'])

方法3:使用where()反向逻辑替换

当ColumnB是NaN时保留ColumnA的值,否则保留ColumnB原值:

df['ColumnB'] = df['ColumnA'].where(pd.isna(df['ColumnB']), df['ColumnB'])

为什么if语句只替换了第一个值?

手动编写的if语句通常是逐行遍历但未正确循环所有行,或者仅处理了第一个匹配的NaN。而上述pandas方法都是向量化操作,会批量处理所有符合条件的行,不会遗漏任何NaN值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:35:26