Python循环遍历nAtt变量报错:SyntaxError: can't assign to literal
问题分析与解决
你写的代码存在两个核心问题:
- 语法错误:Python不允许将数字字面量(比如0、1)作为for循环的变量名,变量名必须是合法的标识符(比如用
val、item这类名称)。 - 逻辑错误:四个独立的for循环会重复遍历
nAtt数组四次,最终nAtt_change只会保留最后一个循环的赋值结果,根本没实现“根据每个元素的值对应生成结果”的需求。
下面是几种正确的实现方式:
方法1:字典映射(最简洁高效)
先定义值与对应结果的映射关系,再遍历数组生成结果:
# 定义映射规则 att_mapping = { 0: 0, 1: -6, 2: -10, 3: -20 } # 你的原有代码:获取nAtt数组 nAtt = df["nAtt"].dropna().to_numpy() # 生成对应的结果列表 nAtt_change_list = [att_mapping[val] for val in nAtt]
如果需要逐个处理元素,也可以用普通循环:
nAtt_change_list = [] for val in nAtt: nAtt_change_list.append(att_mapping[val])
方法2:循环内加条件判断
如果不想用字典,可在循环中通过if-elif判断每个值:
nAtt_change_list = [] for val in nAtt: if val == 0: nAtt_change_list.append(0) elif val == 1: nAtt_change_list.append(-6) elif val == 2: nAtt_change_list.append(-10) elif val == 3: nAtt_change_list.append(-20)
方法3:直接在DataFrame中处理(推荐)
既然用了pandas,无需转成numpy数组,直接在DataFrame中新增列处理更高效:
att_mapping = {0: 0, 1: -6, 2: -10, 3: -20} # 直接生成新列 df["nAtt_change"] = df["nAtt"].dropna().map(att_mapping) # 若需要数组,再转换 nAtt_change_array = df["nAtt_change"].to_numpy()
内容的提问来源于stack exchange,提问作者Tiger1982
相关产品推荐
相关产品推荐

