首页 > 解决方案 > 为什么我在已知观察中使用 .loc 收到关键错误

问题描述

尝试按索引提取一行数据时出现关键错误。我根据查看.head()命令来选择索引,所以我知道值在那里。我的索引基于策略 ID。

我看过一些类似下面的帖子,但他们没有回答这个问题: KeyError in Python Pandas dataframe using .loc

这是数据框的屏幕截图: 在此处输入图像描述

然后我尝试:

df_test.loc[92026963:]

这给了我一个关键错误。然后我尝试了:

df_test.loc[92026963]

这给了我同样的错误。我什至尝试将策略 ID 放在引号中。完整回溯如下:

ValueError Traceback (最近一次调用最后) C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, label, side, kind) 4804 try: -> 4805 return self. _searchsorted_monotonic(label, side) 4806 除了ValueError:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in _searchsorted_monotonic(self, label, side) 4764 -> 4765 raise ValueError('index must be monotonic increase or reduction') 4766

ValueError:索引必须单调递增或递减

在处理上述异常的过程中,又出现了一个异常:

KeyError                                  Traceback (most recent call last)
<ipython-input-45-85aa3a940778> in <module>
----> 1 df_test.loc[92026963:]

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key)
   1498 
   1499             maybe_callable = com.apply_if_callable(key, self.obj)
-> 1500             return self._getitem_axis(maybe_callable, axis=axis)
   1501 
   1502     def _is_scalar_access(self, key):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis)
   1865         if isinstance(key, slice):
   1866             self._validate_key(key, axis)
-> 1867             return self._get_slice_axis(key, axis=axis)
   1868         elif com.is_bool_indexer(key):
   1869             return self._getbool_axis(key, axis=axis)

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py in _get_slice_axis(self, slice_obj, axis)
   1531         labels = obj._get_axis(axis)
   1532         indexer = labels.slice_indexer(slice_obj.start, slice_obj.stop,
-> 1533                                        slice_obj.step, kind=self.name)
   1534 
   1535         if isinstance(indexer, slice):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in slice_indexer(self, start, end, step, kind)
   4671         """
   4672         start_slice, end_slice = self.slice_locs(start, end, step=step,
-> 4673                                                  kind=kind)
   4674 
   4675         # return a slice

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in slice_locs(self, start, end, step, kind)
   4870         start_slice = None
   4871         if start is not None:
-> 4872             start_slice = self.get_slice_bound(start, 'left', kind)
   4873         if start_slice is None:
   4874             start_slice = 0

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, label, side, kind)
   4806             except ValueError:
   4807                 # raise the original KeyError
-> 4808                 raise err
   4809 
   4810         if isinstance(slc, np.ndarray):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_slice_bound(self, label, side, kind)
   4800         # we need to look up the label
   4801         try:
-> 4802             slc = self._get_loc_only_exact_matches(label)
   4803         except KeyError as err:
   4804             try:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in _get_loc_only_exact_matches(self, key)
   4770         get_slice_bound.
   4771         """
-> 4772         return self.get_loc(key)
   4773 
   4774     def get_slice_bound(self, label, side, kind):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2657                 return self._engine.get_loc(key)
   2658             except KeyError:
-> 2659                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2660         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2661         if indexer.ndim > 1 or indexer.size > 1:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 92026963

标签: pythonpandasslice

解决方案


看来这里有必要重新分配DataFrame.set_index

df_test = df_test.set_index('policy')

或使用inplace=True

df_test.set_index('policy', inplace=True)

推荐阅读