Pandas apply处理列报'float' object is not subscriptable错误
报错原因
'float' object is not subscriptable 报错是因为apply的传参逻辑搞错了:
- 你是对
df['Latitude']单列调用apply,此时传入lambda的参数x是这一列逐行的单个浮点型数值,不是整行的Series对象 - 你写的
x['Latitude']是尝试对浮点数做键索引,浮点数不支持这类下标操作,直接触发报错
修复方法
方法1:修正现有apply逻辑
不需要在lambda里再做列索引,x本身就是待处理的纬度值,直接传入自定义函数即可:
def true_latitude(Latitude): if Latitude > 1.5: return Latitude * (-1.0) else: return Latitude df['Latitude'] = df['Latitude'].apply(true_latitude)
不需要额外套lambda,直接把函数名传给apply就行,写法更简洁。
方法2:pandas向量化实现(推荐,性能更高)
如果数据量较大,不建议用apply逐行循环,直接用pandas原生的向量化操作,运行速度会快很多:
df.loc[df['Latitude'] > 1.5, 'Latitude'] *= -1.0
补充:如果确实需要按行遍历整个DataFrame取多列值处理,才需要写
df.apply(axis=1),此时传入的x才是整行数据,支持x['列名']的索引写法。但当前场景只处理单列,用整行apply的写法会产生不必要的性能损耗。
内容的提问来源于stack exchange,提问作者Bisma Adhira
相关产品推荐
相关产品推荐

