Pandas KeyError:值不在索引中

新手上路,请多包涵

我有以下代码,

 df = pd.read_csv(CsvFileName)

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)

p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]] = p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]].astype(int)

它一直在工作,直到 csv 文件没有足够的覆盖范围(所有工作日)。例如,使用以下 .csv 文件,

 DOW,Hour,Changes
4Wed,01,237
3Tue,07,2533
1Sun,01,240
3Tue,12,4407
1Sun,09,2204
1Sun,01,240
1Sun,01,241
1Sun,01,241
3Tue,11,662
4Wed,01,4
2Mon,18,4737
1Sun,15,240
2Mon,02,4
6Fri,01,1
1Sun,01,240
2Mon,19,2300
2Mon,19,2532

我会收到以下错误:

 KeyError: "['5Thu' '7Sat'] not in index"

它似乎有一个非常简单的修复方法,但我对 Python 还太陌生,不知道如何修复它。

原文由 xpt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 793
2 个回答

使用 reindex 获取您需要的所有列。它会保留已经存在的那些,否则放在空列中。

 p = p.reindex(columns=['1Sun', '2Mon', '3Tue', '4Wed', '5Thu', '6Fri', '7Sat'])

因此,您的整个代码示例应如下所示:

 df = pd.read_csv(CsvFileName)

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)

columns = ["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]
p = p.reindex(columns=columns)
p[columns] = p[columns].astype(int)

原文由 piRSquared 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有一个非常相似的问题。我得到了同样的错误,因为 csv 的标题中包含空格。我的 csv 包含标题“性别”,我将其列为:

 [['Gender']]

如果您很容易访问您的 csv,您可以使用 excel 公式 trim() 来剪切单元格的任何空间。

或者像这样删除它

df.columns = df.columns.to_series().apply(lambda x: x.strip())

原文由 ILikeWhiskey 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题