我们有如下 Series:
import pandas as pd
import numpy as np
s = pd.Series(np.arange(3.))
s
"""
0 0.0
1 1.0
2 2.0
dtype: float64
"""
我们想要用 s[-1]
来获取这个 Series 中的末尾元素,但会报错。因为我们在创建 Series 时没有指定 index
,因此默认的 index
为 0-2 的整数。所以这时 pandas 不能分辨索引的 -1
到底是指 index
中的 label 还是指整数位置。从报错情况看,pandas 显然会将 -1
当作一个 label,但我们的 index
中并没有这个 label。但如果我们指定一个非整数的 index
,那就不会引起混淆了:
s2 = pd.Series(np.arange(3.), index=['a', 'b', 'c'])
s2[-1]
"""
2.0
"""
另外一个有趣的地方在于,index
是否为整数对区间的闭合有影响,如果为整数,则为左闭右开,否则为左闭右闭:
s[:1]
"""
0 0.0
dtype: float64
"""
s2[:'b']
"""
a 0.0
b 1.0
dtype: float64
"""
这似乎与 loc
和 iloc
的情况很相似,使用整数位置索引的 iloc
为左闭右开,而使用 label 索引的 loc
则是左闭右闭:
s.loc[:1]
"""
0 0.0
1 1.0
dtype: float64
"""
s.iloc[:1]
"""
0 0.0
dtype: float64
"""
Python for Data Analysis, 2 n d ^{\rm nd} nd edition. Wes McKinney.