Python列表推导式语法错误:将DataFrame列值按条件转0/1
问题解决方法
你的代码存在两个问题:
- 列表推导式语法逻辑错误:你把三元表达式的顺序写反了,正确的分支判断要放在循环遍历的前面,后面的
if是用来过滤元素的,不能用来做分支赋值。 - 遍历对象错误:直接遍历
df拿到的是列名,而非col1里的数值,应该遍历df['col1']。
修正方案
方案1:修正列表推导式
先写出正确的列表推导式,再转成DataFrame:
import pandas as pd # 假设原始df已定义 df = pd.DataFrame({'col1': [-12, -64, 24, 2, 6, 75, 3, 10, 42, 15, 14]}) # 修正后的代码 df_new = pd.DataFrame({'col1': [1 if x > 15 else 0 for x in df['col1']]})
方案2:用Pandas矢量化操作(更高效)
Pandas支持批量数值判断,比列表推导式更适配DataFrame场景,处理大数据时速度更快:
# 先判断每个值是否大于15,再将布尔值转为整数(True→1,False→0) df_new = df['col1'].gt(15).astype(int).to_frame()
也可以用apply方法实现:
df_new = df['col1'].apply(lambda x: 1 if x > 15 else 0).to_frame()
运行任意一种代码,都能得到预期结果:
col1 0 0 1 0 2 1 3 0 4 0 5 1 6 0 7 0 8 1 9 0 10 0
内容的提问来源于stack exchange,提问作者Strovic
相关产品推荐
相关产品推荐

