爲什麼我會在一個案例中遇到KeyError,而在另一個案例中卻沒有?見下文。pandas:KeyError在一個案例中,但在其他類似案例中不存在
>>> import pandas as pd
>>> s1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
>>> s2 = pd.Series([10, 20, 30, 40], index=list('acbd'))
>>> s1.loc['a':'z']
a 10
b 20
c 30
d 40
dtype: int64
>>> s2.loc['a':'z']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/path/lib/python2.7/site-packages/pandas/core/series.py", line 559, in __getitem__
return self._get_with(key)
File "/path/lib/python2.7/site-packages/pandas/core/series.py", line 564, in _get_with
indexer = self.index._convert_slice_indexer(key, kind='getitem')
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 871, in _convert_slice_indexer
key, is_index_slice=is_index_slice)
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 806, in _convert_slice_indexer_getitem
return self._convert_slice_indexer(key)
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 893, in _convert_slice_indexer
indexer = self.slice_indexer(start, stop, step)
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 2346, in slice_indexer
start_slice, end_slice = self.slice_locs(start, end, step=step, kind=kind)
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 2496, in slice_locs
end_slice = self.get_slice_bound(end, 'right', kind)
File "/path/lib/python2.7/site-packages/pandas/core/index.py", line 2438, in get_slice_bound
raise err
KeyError: 'z'
更新: 答案之一說,這可能是因爲s1.index.is_monotonic
是真實的。但這裏is_monotonic
是False
,但沒有KeyError
。
>>> s3 = pd.Series([10, 20, 30, 40], index=list('dcba'))
>>> s3['z':'a']
d 10
c 20
b 30
a 40
dtype: int64
>>> s3.index.is_monotonic
False
的Python v2.7.5,熊貓v0.16.1
我可以證實0.16.1表現出您描述的行爲。奇怪的是,熊貓0.15.2給兩個DataFrames提供了一個錯誤:''stop bound [z]不在[index]中'。 – chrisaycock
關於你的更新:'s3.index.is_monotonic_decreasing'是'True'。 – chrisaycock