为什么 Pandas 系列切片在使用索引号与索引值进行切片时表现不同?
Why does Pandas Series slicing behave differently when slicing using index numbers versus index values?
遇到这个问题,很好奇为什么使用索引号进行切片的值在最后是独占的,但使用索引值是包含在内的。这是一个简短的可重现示例。如果我使用了不当的术语,我深表歉意。
# start with a pandas series
series = pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
# slicing using index values
series['b':'e']
## returns
| b| 1|
| c| 2|
| d| 3|
| e| 4|
# slicing using index numbers
series[1:4]
## returns
| b| 1|
| c| 2|
| d| 3|
为什么他们 return 的输出不同? 'b':'e'
和系列中的索引 1:4
不一样吗?
不确定之前是否有人回答过这个问题,因此有一个社区 wiki。
根据 Slicing with Labels 文档:
When using .loc with slices, if both the start and the stop labels are present in the index, then elements located between the two (including them) are returned
当您这样做时会发生这种情况:
series['b':'e']
因为我们是按标签而不是位置进行切片的。因此标签是包容性的。
然而,当您使用 iloc
按位置切片时,它的行为有点不同。它考虑了第一个位置并排除了最后一个,非常类似于 python 索引的工作方式
因此 series[1:4]
从切片中排除位置 4。
阅读更多关于 slicing by position
当标签与位置相同时也可以复制:
pd.Series(np.arange(5)).loc[1:4]
这个 returns 索引 1,2,3,4 而下面的:
pd.Series(np.arange(5))[1:4]
排除指数==4。
遇到这个问题,很好奇为什么使用索引号进行切片的值在最后是独占的,但使用索引值是包含在内的。这是一个简短的可重现示例。如果我使用了不当的术语,我深表歉意。
# start with a pandas series
series = pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
# slicing using index values
series['b':'e']
## returns
| b| 1|
| c| 2|
| d| 3|
| e| 4|
# slicing using index numbers
series[1:4]
## returns
| b| 1|
| c| 2|
| d| 3|
为什么他们 return 的输出不同? 'b':'e'
和系列中的索引 1:4
不一样吗?
不确定之前是否有人回答过这个问题,因此有一个社区 wiki。
根据 Slicing with Labels 文档:
When using .loc with slices, if both the start and the stop labels are present in the index, then elements located between the two (including them) are returned
当您这样做时会发生这种情况:
series['b':'e']
因为我们是按标签而不是位置进行切片的。因此标签是包容性的。
然而,当您使用 iloc
按位置切片时,它的行为有点不同。它考虑了第一个位置并排除了最后一个,非常类似于 python 索引的工作方式
因此 series[1:4]
从切片中排除位置 4。
阅读更多关于 slicing by position
当标签与位置相同时也可以复制:
pd.Series(np.arange(5)).loc[1:4]
这个 returns 索引 1,2,3,4 而下面的:
pd.Series(np.arange(5))[1:4]
排除指数==4。