使用pandas对DataFrame两列做除法得到NaN值的原因及解决方法咨询
问题原因
DataFrame.apply()默认axis=0,即按列遍历执行传入的函数,你的代码逻辑需要按行取两列的值做除法,参数不匹配导致运算结果无法对齐到每一行,最终返回全NaN。
修复方案
方法1:为apply指定按行遍历参数
在apply中新增axis=1参数,明确指定逐行处理:
import pandas as pd df = {'drive_mile': [15.1, 2.1, 7.12], 'price': [40, 9, 31]} df = pd.DataFrame(df) df['price/km'] = df[['drive_mile', 'price']].apply(lambda x: x[1]/x[0], axis=1) print(df)
运行后输出正确结果:
drive_mile price price/km 0 15.10 40 2.649007 1 2.10 9 4.285714 2 7.12 31 4.353933
小提示:按行处理时建议用列名取值
lambda x: x['price']/x['drive_mile'],避免列顺序变化导致运算逻辑错误。
方法2:使用pandas向量化运算(更推荐)
pandas原生支持整列的算术运算,不需要遍历,代码更简洁、性能远高于apply方案,是列间运算的最优实践:
df['price/km'] = df['price'] / df['drive_mile']
内容的提问来源于stack exchange,提问作者Laughingtree
相关产品推荐
相关产品推荐

