Pandas为DataFrame按条件新增列报错,请求排查问题原因
问题分析与修正方案
你尝试的代码中存在的核心错误
- 多处误用赋值运算符
=替代比较运算符==:Python里=是给变量赋值,==才是判断两个值是否相等。 - 列表推导式语法不完整:条件判断的推导式必须包含
if...else完整结构,不能只写满足条件的返回值。
逐行错误说明
erm.loc[erm.Calcul = 4, "typeRappel"] = 1- 错误:
erm.Calcul = 4是赋值操作,应改为erm.Calcul == 4;若typeRappel列未创建,建议先初始化默认值再赋值。
- 错误:
erm["typeRappel"] = np.where(erm['Calcul'] = 4.0, 1, 0)- 错误:同样是
=代替==,修正后np.where(erm['Calcul'] == 4.0, 1, 0)是可行写法,会自动生成1(满足条件)和0(不满足)的列。
- 错误:同样是
erm["Terminal"] = ["1" if c = "010" for c in erm['Code']]- 错误:
c = "010"应为c == "010",且缺少else分支,需补充不满足条件时的返回值,比如["1" if c == "010" else "0" for c in erm['Code']]。
- 错误:
你最后运行的代码:
erm['typeRappel'] = [ 1 if x == 4 for x in erm['Calcul']]- 错误:列表推导式缺少else部分,当
x !=4时没有指定返回值,Python会抛出语法错误,必须补充不满足条件时的取值。
- 错误:列表推导式缺少else部分,当
正确实现方式
方式1:修正列表推导式
erm['typeRappel'] = [1 if x == 4 else 0 for x in erm['Calcul']]
方式2:使用np.where(推荐,处理大数据量更高效)
import numpy as np erm['typeRappel'] = np.where(erm['Calcul'] == 4, 1, 0)
方式3:使用loc赋值
先初始化列的默认值,再给满足条件的行赋值:
erm['typeRappel'] = 0 # 先默认设为0 erm.loc[erm['Calcul'] == 4, 'typeRappel'] = 1
内容的提问来源于stack exchange,提问作者tchos
相关产品推荐
相关产品推荐

