Python 数据帧loc索引的切片行为不正确
我认为[0:0]的loc切片应该产生空输出。是虫子吗Python 数据帧loc索引的切片行为不正确,python,pandas,Python,Pandas,我认为[0:0]的loc切片应该产生空输出。是虫子吗 >>> df 0 1 2 3 0 1 21 51 61 1 2 22 52 62 2 3 23 53 63 >>> df.loc[0:0] 0 1 2 3 0 1 21 51 61 不,基于位置的索引具有pandas数据结构的包含端点。看 与标准的Python序列切片相比 端点不包含在内,熊猫中基于标签的切片包含在内。 这样做的主要原因是
>>> df
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
>>> df.loc[0:0]
0 1 2 3
0 1 21 51 61
不,基于位置的索引具有
pandas
数据结构的包含端点。看
与标准的Python序列切片相比
端点不包含在内,熊猫中基于标签的切片包含在内。
这样做的主要原因是,通常不可能轻松地
确定中特定标签后的“后续”或下一个元素
索引
如果使用基于整数位置的索引,如iloc
,其行为将类似于vanillapython
数据结构:
In [5]: df
Out[5]:
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
In [6]: df.iloc[0:0]
Out[6]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []
In [7]: df.loc[0:0]
Out[7]:
0 1 2 3
0 1 21 51 61
In [8]:
不,基于位置的索引具有
pandas
数据结构的包含端点。看
与标准的Python序列切片相比
端点不包含在内,熊猫中基于标签的切片包含在内。
这样做的主要原因是,通常不可能轻松地
确定中特定标签后的“后续”或下一个元素
索引
如果使用基于整数位置的索引,如iloc
,其行为将类似于vanillapython
数据结构:
In [5]: df
Out[5]:
0 1 2 3
0 1 21 51 61
1 2 22 52 62
2 3 23 53 63
In [6]: df.iloc[0:0]
Out[6]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []
In [7]: df.loc[0:0]
Out[7]:
0 1 2 3
0 1 21 51 61
In [8]:
切片通常在第一个索引上包含,在第二个索引上独占。例如:
x = [1,2,3,4,5]
print x[0:0]
# prints [], the empty list.
但是,文档中明确指出,开始索引和结束索引都包含在loc
功能中:
带有标签的切片对象,例如“A”:“f”(注意,与通常相反
python切片,包括开始和停止!)
为什么熊猫要这样欺负你?只有上帝知道。切片通常在第一个索引上包含,在第二个索引上独占。例如:
x = [1,2,3,4,5]
print x[0:0]
# prints [], the empty list.
但是,文档中明确指出,开始索引和结束索引都包含在loc
功能中:
带有标签的切片对象,例如“A”:“f”(注意,与通常相反
python切片,包括开始和停止!)
为什么熊猫要这样欺负你?只有上帝知道。他们到底为什么会引入一种与语言语义不一致的行为???我不确定,我现在也有点暴躁。事实上,在你发布之前我并不知道这一点(我不经常使用Panda的,只是纯numpy通常会帮我玩这个把戏)到底为什么他们会引入与语言语义不一致的行为???我不确定,我现在也有点暴躁。我其实不知道这一点,直到你发布它(我不经常使用熊猫的,只是纯numpy通常会为我做的把戏)非常好的答案。然而,这种行为令人沮丧且不直观,不是提出这个问题的合适论坛。但是,如果切片被禁用/引发错误,一般开发人员会比给出稍微不同的行为更高兴@不,基于位置的切片是令人惊奇的,它会让任何开发人员更快乐。如果普通的开发人员阅读文档,他们会更高兴。我喜欢python,因为我不必为预期的行为阅读文档。就我个人而言,我不喜欢不一致的切片,而且我确信还存在未知的错误。我刚刚发现这导致了我程序中的错误!谢谢你的解释!回答得很好。然而,这种行为令人沮丧且不直观,不是提出这个问题的合适论坛。但是,如果切片被禁用/引发错误,一般开发人员会比给出稍微不同的行为更高兴@不,基于位置的切片是令人惊奇的,它会让任何开发人员更快乐。如果普通的开发人员阅读文档,他们会更高兴。我喜欢python,因为我不必为预期的行为阅读文档。就我个人而言,我不喜欢不一致的切片,而且我确信还存在未知的错误。我刚刚发现这导致了我程序中的错误!谢谢你的解释!