我正在尝试将条件应用于我的pandas数据框中的列,但出现此错误:
TypeError: 'float' object is not iterable
Cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22.000,25.000,27.000,35.000]
}
Cars = DataFrame(Cars, columns= ['Brand', 'Price'])
Cars ['Price'] = Cars ['Price'].apply(lambda x: [0 if y <= 25.000 else 1 for y in x])
有什么想法吗?
答案 0 :(得分:2)
这里apply
是不正确的选择,因为内部有循环,因此处理大数据时速度很慢。最好将向量化解决方案与numpy.where
配合使用:
Cars ['Price'] = np.where(Cars ['Price'] <= 25.000, 0, 1)
将innvert
的条件设为>
,然后将integer
到True/False
的映射强制转换为0/1
:
Cars ['Price'] = (Cars ['Price'] > 25.000).astype(int)
print (Cars)
Brand Price
0 Honda Civic 0
1 Toyota Corolla 0
2 Ford Focus 1
3 Audi A4 1
答案 1 :(得分:1)
不要遍历该列表,.apply
applies the function到列中的每个元素!
尝试以下行:
Cars ['Price'] = Cars ['Price'].apply(lambda x: 0 if x <= 25.000 else 1)