我正在使用 python 3.6、pandas 24.2 并遇到了差异。
>>> x = pd.Series(range(3))
>>> x[-1]
>>> x = pd.Series(range(3), index=[0,1,2])
>>> x[-1]
Run Code Online (Sandbox Code Playgroud)
两者都会产生错误
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
Run Code Online (Sandbox Code Playgroud)
尽管
>>> x = pd.Series(range(3), index=['a','b','c'])
>>> x[-1]
2
Run Code Online (Sandbox Code Playgroud)
与任何其他形式的索引一起使用都可以。它们是相同的数据结构,但添加某些类型的索引允许负索引,而其他类型则不允许?
要使用负索引,您可以使用:
\n\nx.iloc[-1]\n
Run Code Online (Sandbox Code Playgroud)\n\n这在所有情况下都有效。
\n\n是的,该错误是由于 @a-arnold 提到的一致性问题造成的。
\n\n由于索引[]
必须处理很多情况,所以我们不能总是使用这样的索引。
当您将自定义索引设置为字符串时,负索引会起作用,因为它与整数索引不冲突。
\n\n索引和选择数据 \xe2\x80\x94 pandas 1.0.3 文档提供了有关 pandas 中索引和选择的很好的想法。
\n