我正在使用 python 3.6,pandas 24.2 并遇到了一个差异。
>>> x = pd.Series(range(3))
>>> x[-1]
>>> x = pd.Series(range(3), index=[0,1,2])
>>> x[-1]
两者都会产生错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/conda3/ml4t/lib/python3.6/site-packages/pandas/core/series.py", line 868, in __getitem__
result = self.index.get_value(self, key)
File "/opt/conda3/ml4t/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4375, in get_value
tz=getattr(series.dtype, 'tz', None))
File "pandas/_libs/index.pyx", line 81, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 89, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 987, in pandas._libs.hashtable.Int64HashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 993, in pandas._libs.hashtable.Int64HashTable.get_item
KeyError: -1
尽管
>>> x = pd.Series(range(3), index=['a','b','c'])
>>> x[-1]
2
与任何其他形式的索引一起使用都很好。它们是相同的数据结构,但添加某些类型的索引允许负索引,而其他索引则不允许?
最佳答案
要使用负索引,您可以使用:
x.iloc[-1]
这适用于所有情况。
是的,该错误是由@a-arnold 提到的一致性问题引起的。
由于索引
[]
必须处理很多情况,我们不能总是使用这样的索引。当您将自定义索引设置为字符串时,负索引会起作用,因为它与整数索引不冲突。
Indexing and selecting data — pandas 1.0.3 documentation对 Pandas 中的索引和选择给出了很好的想法。
关于Python 负索引差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61435459/