0

I'm working through the book Mastering Pandas for Finance and I created the following DataFrame for the S&P 500:

    sp500 = pd.read_csv("sp500.csv", index='Symbol', usecols=[0, 2, 3, 7])

Returns the following DataFrame:

S&P 500 DataFrame

A part of the exercise is to then display the dataframe with only select columns using the following code:

            $ sp500[[1, 2]].head(3)

Which should produce the following DataFrame:

S&P 500 DataFrame with Indexed Columns Only

When I run the code I get the following error:

    KeyError: '[1 2] not in index'

Traceback

---------------------------------------------------------------------------
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 Answers1

0

From the image it looks like the names of the columns of sp500 are sector, price and book value. So pandas is complaining because you are asking columns that are called 1 and 2.

sp500[sp500.columns[[1,2]]] will give you the 2nd and third columns which I think is what you are after.