Dataframe中的KeyError

时间:2015-07-01 17:25:52

标签: python pandas dataframe keyerror

我有一个数据框,当我将其导出到csv文件时,它看起来就像我想要的那样。

CompanyName 1   2   3   4   5   6   7   8   9   10  11  12
Company 1   182 270 278 314 180 152 110 127 129 117 127 81
Company 2   163 147 192 142 186 231 214 130 112 117 93  101
Company 3   126 88  99  139 97  97  96  37  79  116 111 95
Company 4   84  89  71  95  80  89  83  88  104 93  78  64

但是,当我尝试从'CompanyName'键中取出时,我得到一个KeyError: 'CompanyName'我怀疑它被某处覆盖但我不确定如何修复它。

如果我打印我的数据帧,我得到:

pivot_table.head(2)
Out[62]: 
Month                  1    2    3    4    5    6    7    8    9    10   11  CompanyName                                                                   
Company 1       182  270  278  314  180  152  110  127  129  117  127   
Company 2       163  147  192  142  186  231  214  130  112  117   93   

Month                  12  
CompanyName                
Company 1        81  
Company 2       101  

这很难读懂,无法分辨出发生了什么。抛出错误的代码:

pivot_table['CompanyName'] = [str(x) for x in pivot_table['CompanyName']]
Companies = list(pivot_table['CompanyName'])
months = ["1","2","3","4","5","6","7","8","9","10","11","12"]
pivot_table = pivot_table.set_index('CompanyName')

修改

Bleh的回答帮助消除了这个KeyError。我需要通过重置索引来启动代码,因为它无法调用之前已成为索引的Key。

1 个答案:

答案 0 :(得分:9)

这是因为您已将索引设置为CompanyName

您无法以这种方式引用索引。

使用pivot_table = pivot_table.reset_index()重置索引并再次尝试访问它。

这是重现的错误:

 In [45]: df = pd.read_clipboard()

In [46]: df
Out[46]: 
         CompanyName    1    2    3    4    5    6    7    8    9   10   11  \
Company            1  182  270  278  314  180  152  110  127  129  117  127   
Company            2  163  147  192  142  186  231  214  130  112  117   93   
Company            3  126   88   99  139   97   97   96   37   79  116  111   
Company            4   84   89   71   95   80   89   83   88  104   93   78   

          12  
Company   81  
Company  101  
Company   95  
Company   64  

In [47]: df['CompanyName']
Out[47]: 
Company    1
Company    2
Company    3
Company    4
Name: CompanyName, dtype: int64

In [48]: df = df.set_index('CompanyName')

In [49]: df['CompanyName']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-49-d5b597a2bc80> in <module>()
----> 1 df['CompanyName']

/Library/Python/2.7/site-packages/pandas-0.16.1-py2.7-macosx-10.10-intel.egg/pandas/core/frame.pyc in __getitem__(self, key)
   1789             return self._getitem_multilevel(key)
   1790         else:
-> 1791             return self._getitem_column(key)
   1792 
   1793     def _getitem_column(self, key):

/Library/Python/2.7/site-packages/pandas-0.16.1-py2.7-macosx-10.10-intel.egg/pandas/core/frame.pyc in _getitem_column(self, key)
   1796         # get column
   1797         if self.columns.is_unique:
-> 1798             return self._get_item_cache(key)
   1799 
   1800         # duplicate columns & possible reduce dimensionaility

/Library/Python/2.7/site-packages/pandas-0.16.1-py2.7-macosx-10.10-intel.egg/pandas/core/generic.pyc in _get_item_cache(self, item)
   1082         res = cache.get(item)
   1083         if res is None:
-> 1084             values = self._data.get(item)
   1085             res = self._box_item_values(item, values)
   1086             cache[item] = res

/Library/Python/2.7/site-packages/pandas-0.16.1-py2.7-macosx-10.10-intel.egg/pandas/core/internals.pyc in get(self, item, fastpath)
   2849 
   2850             if not isnull(item):
-> 2851                 loc = self.items.get_loc(item)
   2852             else:
   2853                 indexer = np.arange(len(self.items))[isnull(self.items)]

/Library/Python/2.7/site-packages/pandas-0.16.1-py2.7-macosx-10.10-intel.egg/pandas/core/index.pyc in get_loc(self, key, method)
   1576         """
   1577         if method is None:
-> 1578             return self._engine.get_loc(_values_from_object(key))
   1579 
   1580         indexer = self.get_indexer([key], method=method)

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3824)()

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)()

pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12349)()

pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12300)()

KeyError: 'CompanyName'

更正输出:

In [50]: df = df.reset_index()

In [51]: df['CompanyName']
Out[51]: 
0    1
1    2
2    3
3    4
Name: CompanyName, dtype: int64