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

在PyCharm中运行Jupyter代码时出现KeyError:5问题求助

解决PyCharm中Pandas代码的KeyError问题

先看你抛出的错误栈,问题直接指向循环里的这一行代码:

and not df_ticker.Close[i-1] >= df_ticker [i-2]:

错误根源

这里的df_ticker [i-2]是典型笔误:当你直接给DataFrame加方括号+整数时,Pandas会默认你要取列名为该整数的列,但你的数据里根本没有列名为5的字段,所以直接抛出了KeyError:5。

你真正想实现的应该是比较上上个行的Close值,所以这里必须明确指定列名,写成df_ticker.Close[i-2](或者df_ticker['Close'][i-2])。

修正后的代码片段

把循环里的条件语句改成下面这样就行:

for i in range(1, len(df_ticker)):
    if df_ticker.Close[i] > df_ticker.Close[i-1] and df_ticker.Red[i] == False and \
       df_ticker.Value.round(decimals = 0)[i] >= df_ticker.Value.round(decimals = 0)[i-1] \
       and not df_ticker.Close[i-1] >= df_ticker.Close[i-2]:
        rise.append(df_ticker.Close[i])

额外说明:为什么Jupyter里能正常运行?

大概率是你在Jupyter中写的代码是正确的(完整写了.Close),但复制到PyCharm时不小心漏掉了这个部分,才导致了语法逻辑错误。其实如果在Jupyter里写错同样会报KeyError,只是你可能没注意到这个细节~

另外给你个小建议:在Pandas里尽量避免直接用[i]按位置索引,推荐用.iloc[i]来明确按位置取行,代码可读性更高,也能减少这类笔误,比如:

for i in range(1, len(df_ticker)):
    # 先把需要用到的值单独取出来
    current_close = df_ticker['Close'].iloc[i]
    prev_close = df_ticker['Close'].iloc[i-1]
    prev_prev_close = df_ticker['Close'].iloc[i-2]
    current_red = df_ticker['Red'].iloc[i]
    current_value = df_ticker['Value'].round(0).iloc[i]
    prev_value = df_ticker['Value'].round(0).iloc[i-1]
    
    if current_close > prev_close and not current_red and \
       current_value >= prev_value and not prev_close >= prev_prev_close:
        rise.append(current_close)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:57:34