如何通过带条件的循环为Pandas DataFrame创建新列?
Pandas 带条件创建新列的错误解决
错误原因
你的代码里两个问题导致了报错:
student_card['new'].append(v)中,v是字符串,但Series.append()只能接收Series或DataFrame对象,不能直接拼接单个字符串,这就是触发TypeError的直接原因。- 初始化新列时
student_card['new'] = pd.Series()会生成一个空Series,它的索引和原DataFrame不匹配,后续操作必然出问题。
正确实现方法
推荐:用Pandas向量化操作(高效)
Pandas原生支持向量化处理,完全不用循环,速度快还简洁:
import pandas as pd student_card = pd.DataFrame({'ID':[20190103, 20190222, 20190531], 'name':['Kim', 'Yang', 'Park'], 'class':['H', 'W', 'S']}) # 满足条件时取name值,否则为NaN student_card['new'] = student_card['name'].where(student_card['name'] == 'Yang')
若一定要用循环(仅作参考)
如果非要用循环实现,得改成直接索引赋值,别用append:
import pandas as pd student_card = pd.DataFrame({'ID':[20190103, 20190222, 20190531], 'name':['Kim', 'Yang', 'Park'], 'class':['H', 'W', 'S']}) # 先把新列初始化为空值,保证长度和原表一致 student_card['new'] = pd.NA for i, v in student_card['name'].items(): if v == 'Yang': student_card.loc[i, 'new'] = v
运行后得到的结果:
| ID | name | class | new |
|---|---|---|---|
| 20190103 | Kim | H | |
| 20190222 | Yang | W | Yang |
| 20190531 | Park | S |
内容的提问来源于stack exchange,提问作者Se Bi Y
相关产品推荐
相关产品推荐

