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

如何向pandas DataFrame逐行添加新列并填充字典映射值

失效原因排查
  • 第一版代码问题:
    • 列名写错:代码新增的列叫level,和需求要求的label名称不符,导出后自然找不到目标列
    • 取值逻辑脆弱:用df.iloc[i].iat[3]硬编码列位置取sender值,一旦列顺序调整就会取错数据
  • 第二版代码问题:
    • 方法用法错误:pandas的assign()不会修改原DataFrame,只会返回添加新列后的新对象,代码没有接收返回值,所有修改都不会生效
    • 列名写错:代码里新列名写的是labels(带复数s),不符合要求
    • 逻辑错误:循环内每次都执行assign操作,既无必要也会导致逻辑混乱,且dfNewColList没有提前初始化为空列表,运行会直接报错
逐行填充正确实现

严格按照逐行读取、逐行赋值的要求实现,代码如下:

# 提前初始化label列,避免循环赋值触发pandas的SettingWithCopyWarning
df['label'] = None

# 逐行遍历DataFrame,itertuples逐行迭代的效率远高于iloc逐行索引
for row in df.itertuples():
    # 直接按字段名取sender值,不依赖固定列位置
    current_sender = row.sender
    # 从字典查询对应标签,可在get第二个参数传入字典无匹配时的默认填充值
    current_label = a_dict.get(current_sender)
    # 给当前行的label列赋值
    df.loc[row.Index, 'label'] = current_label

# 导出结果文件
df.to_csv('/Users/tt/file_name.csv', encoding='utf-8', index=False)

注:如果需要兼容iloc索引的写法,只需要把循环内取sender的逻辑替换为current_sender = df.iloc[row.Index, df.columns.get_loc('sender')]即可,会动态获取sender字段的列位置,不会因为列顺序变动出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:36:20