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
相关产品推荐
相关产品推荐

