Pandas基于returns列新建returns_direction列报KeyError如何解决
错误原因
- 循环遍历对象错误:
for i in df['returns']中的i是returns列的实际数值,不是DataFrame的行索引,使用df['returns'][i]相当于拿收益率数值当索引取值,你的索引不存在对应值所以抛出KeyError - 赋值符号错误:代码中使用
==做赋值操作,==是相等比较运算符,赋值应该用= - 链式索引风险:直接用
df['列名'][索引]的写法属于链式索引,Pandas可能抛出SettingWithCopyWarning,推荐用loc索引完成赋值
修复方案
方案1:向量化操作(最优,性能最高)
直接将布尔判断结果转为整型,一行代码即可实现,无需导入第三方库:
df['returns_direction'] = (df['returns'] > 0).astype('int')
也可以用np.where实现,可读性更强:
import numpy as np df['returns_direction'] = np.where(df['returns'] > 0, 1, 0)
方案2:循环写法(仅作参考,不推荐,大数据量下性能极差)
如果必须使用循环实现,需要遍历行索引而非列值:
for idx in df.index: if df.loc[idx, 'returns'] > 0: df.loc[idx, 'returns_direction'] = 1 else: df.loc[idx, 'returns_direction'] = 0
内容的提问来源于stack exchange,提问作者Claire
相关产品推荐
相关产品推荐

