如何解决为什么 Pandas 系列切片在使用索引号和索引值切片时表现不同?
遇到这个问题,很好奇为什么使用索引号进行切片的值在最后是排他的,但使用索引值是包括在内的。这是一个简短的可重现示例。如果我使用了不正确的术语,我深表歉意。
# 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|
为什么它们不返回相同的输出? 'b':'e'
与系列中的索引 1:4
不一样吗?
解决方法
不确定之前是否已经回答过这个问题,因此社区维基。
根据 Slicing with Labels 文档:
将 .loc 与切片一起使用时,如果索引中同时存在开始和停止标签,则返回位于两者之间(包括它们)的元素
当你这样做时会发生这种情况:
series['b':'e']
因为我们是按标签而不是位置进行切片。因此标签是包含性的。
但是,例如,当您使用 iloc
按位置切片时,它的行为会有所不同。它考虑了第一个位置并排除了最后一个,非常类似于 python 索引的工作原理
因此 series[1:4]
从切片中排除位置 4。
在 slicing by position
当标签与位置相同时,也可以复制这一点:
pd.Series(np.arange(5)).loc[1:4]
这将返回索引 1,2,3,4 而以下:
pd.Series(np.arange(5))[1:4]
排除索引==4。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。