Python Pandas中为DataFrame添加空列并按条件填充CODE列的问题求助
问题修正与代码优化
原代码存在的问题
- 未导入pandas库:使用
pd.read_csv但未声明import pandas as pd,直接运行会触发NameError。 - 冗余读取文件:同时用
csv.reader和pd.read_csv读取同一文件,既浪费资源还会导致读取逻辑冲突。 - 变量与语法错误:
CODE变量未定义就调用append方法;AMGT_code与CODE混用,逻辑混乱。else row[2] > '10'是非法语法,else不能附带条件,需改用elif或直接else。
- 字符串数值比较错误:
row[2] <= '10'是按字符串ASCII码比较,不是数值大小比较,会得到错误结果(比如字符串'9'会被判定为大于'10')。 - 未关联DataFrame:生成的CODE值未赋值回DataFrame的
CODE列,未完成核心需求。
修正后的代码
假设你需要将三个条件的结果组合成CODE值(示例为字符串拼接,可按需调整为整数组合等),用pandas原生方法处理更简洁高效:
import pandas as pd # 读取CSV文件到DataFrame df = pd.read_csv('customerprocessrequirement1.csv') # 初始化CODE列 df['CODE'] = '' # 定义生成CODE的逻辑函数 def generate_code(row): # 条件1:判断FRUIT是否为Apple(统一大小写避免判断失误) part1 = 1 if row['FRUIT'].upper() == 'APPLE' else 2 # 条件2:判断DAYs是否≤10(转整数做数值比较) part2 = 0 if int(row['DAYs']) <= 10 else 1 # 条件3:判断TEMP是否≤20(转整数做数值比较) part3 = 1 if int(row['TEMP']) <= 20 else 2 # 组合三个条件结果为CODE,这里用字符串拼接,也可改为整数:part1*100 + part2*10 + part3 return f"{part1}{part2}{part3}" # 对每行应用函数生成CODE df['CODE'] = df.apply(generate_code, axis=1) # 打印结果验证 print(df)
代码说明
- 仅用
pd.read_csv读取文件,完全适配DataFrame的操作逻辑,避免冗余。 - 用
apply方法遍历每行数据,替代手动循环,符合pandas的高效使用习惯。 - 所有数值比较先转为整数,确保逻辑判断准确。
- 用
upper()统一FRUIT字段的大小写,避免因大小写不一致导致判断错误。 - 可根据需求调整CODE的组合方式(比如改为整数相加、拼接成其他格式等)。
示例运行结果
针对你给出的示例数据,运行后会得到:
| Item | FRUIT | DAYs | TEMP | CODE |
|---|---|---|---|---|
| Item_1 | Apple | 5 | 20 | 101 |
| Item_2 | Banana | 15 | 35 | 212 |
内容的提问来源于stack exchange,提问作者B M
相关产品推荐
相关产品推荐

