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

Pandas如何根据DataFrame指定列的字符串内容新增对应赋值的新列

错误原因

  1. 语法错误:iterrows是DataFrame的可调用方法,你的代码里df.iterrows遗漏了调用括号,应该写为df.iterrows()。
  2. 类型错误:当A列的值为空时,部分场景下pandas会将空值识别为NaN(浮点型),直接用in关键字判断字符串是否存在于浮点型变量中,就会触发float is not iterable的报错。
  3. 隐藏问题:直接对iterrows返回的row对象赋值不会修改原DataFrame,必须通过df.loc[index, 列名]的方式写入原表才会生效。

推荐方案(向量化实现,效率远高于循环)

优先用pandas原生字符串方法实现需求,代码更简洁,处理大表时性能优势明显:

import numpy as np

# 先统一处理A列的空值,避免NaN引发类型问题
df['A'] = df['A'].fillna('')
# 多条件匹配生成B列
df['B'] = np.where(
    df['A'].str.contains('Emo/'),
    0,
    np.where(df['A'].str.contains('Neu/'), 1, '')
)

原循环写法的修正版本

如果你坚持用循环实现,修正后的代码如下:

df["B"] = ""
for index, row in df.iterrows():
    a_val = str(row["A"]).strip()
    if "Emo/" in a_val:
        df.loc[index, "B"] = 0
    elif "Neu/" in a_val:
        df.loc[index, "B"] = 1
    else:
        df.loc[index, "B"] = ""

两种方案运行后都可以得到你预期的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:03