Pandas 0.20.3“KeyError:'[1 2] not in index'”尝试选择要在 DataFrame 中显示的列时 [重复]
Posted
技术标签:
【中文标题】Pandas 0.20.3“KeyError:\'[1 2] not in index\'”尝试选择要在 DataFrame 中显示的列时 [重复]【英文标题】:Pandas 0.20.3 "KeyError: '[1 2] not in index'" When Trying to Select Columns to Display in DataFrame [duplicate]Pandas 0.20.3“KeyError:'[1 2] not in index'”尝试选择要在 DataFrame 中显示的列时 [重复] 【发布时间】:2018-05-15 04:45:26 【问题描述】:我正在阅读Mastering Pandas for Finance一书,并为 S&P 500 创建了以下 DataFrame:
sp500 = pd.read_csv("sp500.csv", index='Symbol', usecols=[0, 2, 3, 7])
返回以下数据帧:
S&P 500 DataFrame
练习的一部分是使用以下代码显示仅选择列的数据框:
$ sp500[[1, 2]].head(3)
这应该产生以下DataFrame:
S&P 500 DataFrame with Indexed Columns Only
运行代码时出现以下错误:
KeyError: '[1 2] not in index'
追溯
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-67-9993ec8d3122> in <module>()
----> 1 sp500[[1, 2]].head(3)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key)
1956 if isinstance(key, (Series, np.ndarray, Index, list)):
1957 # either boolean or fancy integer index
-> 1958 return self._getitem_array(key)
1959 elif isinstance(key, DataFrame):
1960 return self._getitem_frame(key)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _getitem_array(self, key)
2000 return self.take(indexer, axis=0, convert=False)
2001 else:
-> 2002 indexer = self.loc._convert_to_indexer(key, axis=1)
2003 return self.take(indexer, axis=1, convert=True)
2004
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
1229 mask = check == -1
1230 if mask.any():
-> 1231 raise KeyError('%s not in index' % objarr[mask])
1232
1233 return _values_from_object(indexer)
KeyError: '[1 2] not in index'
【问题讨论】:
【参考方案1】:从图片上看,sp500
的列名是sector
、price
和book value
。所以 pandas 抱怨是因为你在问名为 1
和 2
的列。
sp500[sp500.columns[[1,2]]]
会给你第二列和第三列,我认为这就是你所追求的。
【讨论】:
以上是关于Pandas 0.20.3“KeyError:'[1 2] not in index'”尝试选择要在 DataFrame 中显示的列时 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Spyder 中打开数据帧时出现 KeyError('pandas._libs.interval')