Pandas如何根据DataFrame指定列的字符串内容新增对应赋值的新列
错误原因
- 语法错误:
iterrows是DataFrame的可调用方法,你的代码里df.iterrows遗漏了调用括号,应该写为df.iterrows()。 - 类型错误:当A列的值为空时,部分场景下pandas会将空值识别为
NaN(浮点型),直接用in关键字判断字符串是否存在于浮点型变量中,就会触发float is not iterable的报错。 - 隐藏问题:直接对
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
相关产品推荐
相关产品推荐

