如何在Pandas中使用带条件的apply函数仅处理Area为NaN的DataFrame行
实现方案
首先修正原示例中sample_func的参数名笔误(函数内引用的变量v未在参数中定义,修改为参数v1):
import pandas as pd from numpy import NaN df = pd.DataFrame({'Area': [1, 9, NaN], 'Val': [1, 3, 5], 'Val2': [7, 9, 10]}) # 修正参数名错误 def sample_func(v1, token): sq = v1**2 return int(sq)
方案1:预筛选目标行再执行apply(推荐,性能更优)
仅选中Area列为NaN的行执行函数,不需要遍历全量数据,适合数据量较大的场景:
df.loc[df['Area'].isna(), 'Area'] = df[df['Area'].isna()].apply(lambda x: sample_func(x['Val'], x['Val2']), axis=1)
方案2:在apply逻辑中嵌入条件判断
写法更简洁,适合小数据集使用:
df['Area'] = df.apply(lambda x: sample_func(x['Val'], x['Val2']) if pd.isna(x['Area']) else x['Area'], axis=1)
执行后最终输出的DataFrame结果如下:
| Area | Val | Val2 |
|---|---|---|
| 1 | 1 | 7 |
| 9 | 3 | 9 |
| 25 | 5 | 10 |
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

