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

Python/Pandas:基于其他列条件替换指定列的NaN值

解决方案

首先注意你的原始数据中,a列的'NaN'是字符串类型,并非pandas可识别的缺失值,这是导致你之前操作失效的核心原因。以下是完整解决步骤:

步骤1:转换字符串'NaN'为真实缺失值

先将a列转为数值类型,同时把字符串'NaN'强制转为缺失值:

import pandas as pd

data = [{'a': 12, 'b': 2, 'c': 3, 'd': 'bat'},
        {'a': 'NaN', 'b': 20, 'c': 30, 'd': 'ball'},
        {'a': 4, 'b': 20, 'c': 30, 'd': 'pin'}]

df = pd.DataFrame(data)
# 转换字符串'NaN'为缺失值
df['a'] = pd.to_numeric(df['a'], errors='coerce')

步骤2:按条件替换缺失值

方法1:使用df.loc(直观易读)

直接定位符合条件的行,将a列的值替换为对应b列的值:

df.loc[(df['c'] > 20) & (df['d'] == 'ball') & df['a'].isna(), 'a'] = df['b']

方法2:使用df.mask(链式操作友好)

通过mask方法,当满足条件时用b列的值替换a列的缺失值:

df['a'] = df['a'].mask(
    (df['c'] > 20) & (df['d'] == 'ball') & df['a'].isna(),
    df['b']
)

执行后,第二行的a列缺失值会被替换为20,最终结果如下:

a   b   c     d
0  12.0   2   3   bat
1  20.0  20  30  ball
2   4.0  20  30   pin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:55:05