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

Python Pandas中为DataFrame添加空列并按条件填充CODE列的问题求助

问题修正与代码优化

原代码存在的问题

  1. 未导入pandas库:使用pd.read_csv但未声明import pandas as pd,直接运行会触发NameError。
  2. 冗余读取文件:同时用csv.reader和pd.read_csv读取同一文件,既浪费资源还会导致读取逻辑冲突。
  3. 变量与语法错误:
    • CODE变量未定义就调用append方法;AMGT_code与CODE混用,逻辑混乱。
    • else row[2] > '10'是非法语法,else不能附带条件,需改用elif或直接else。
  4. 字符串数值比较错误:row[2] <= '10'是按字符串ASCII码比较,不是数值大小比较,会得到错误结果(比如字符串'9'会被判定为大于'10')。
  5. 未关联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的组合方式(比如改为整数相加、拼接成其他格式等)。

示例运行结果

针对你给出的示例数据,运行后会得到:

ItemFRUITDAYsTEMPCODE
Item_1Apple520101
Item_2Banana1535212

内容的提问来源于stack exchange,提问作者B M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:17