python - 为什么我在已知观察中使用 .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
解决方案
看来这里有必要重新分配DataFrame.set_index
:
df_test = df_test.set_index('policy')
或使用inplace=True
:
df_test.set_index('policy', inplace=True)
推荐阅读
- spring-boot - 在 Apache Camel 文件组件中一次读取所有文件
- vb.net - 从 FileName 中提取 DriveId 用于验证功能
- json - JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 `byte[]` 的实例
- javascript - 无法选择和删除的项目不会返回到 typeahead react-bootstrap 中的列表
- react-native - 动态改变 activeTintColor
- java - 正则表达式匹配不以 X 开头的所有内容或包含 Y
- javascript - Vuex:无法更改动作中深层嵌套的状态数据
- python-3.x - 如何生成我所有项目的 xml 隐藏报告
- python - 用于 Flask 或 Django Web 开发的 Jupyterlab
- .net - 有没有办法查看蓝牙 SPP 扫描仪是否进入睡眠状态?