You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:20:56