Python Pandas判断NaN执行列求和或取单列时返回数组问题排查
错误原因
- 列表推导式中返回的是整列计算结果,而非当前遍历行的对应值:
if分支的df[column_names].sum(axis=1)是整个数据集按行求和得到的完整Series,else分支的df['payment2']也是完整的payment2列Series - 遍历每一行的
prev_product_id时,每次都返回长度和整个数据集一致的Series,最终得到的列表元素都是Series对象,而非逐行计算的单个数值,自然无法得到预期的单列结果
最优实现方案
推荐使用pandas向量化操作实现,性能远高于列表推导式:
import numpy as np df['payment_corrected'] = np.where( df['prev_product_id'].isna(), df['payment1'] + df['payment2'], df['payment2'] )
列表推导式修正写法
如果坚持使用列表推导式,需要逐行取对应字段的值:
import math df['payment_corrected'] = [ row['payment1'] + row['payment2'] if math.isnan(float(row['prev_product_id'])) else row['payment2'] for _, row in df.iterrows() ]
内容的提问来源于stack exchange,提问作者eponkratova
相关产品推荐
相关产品推荐

