我认为[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
答案 0 :(得分:5)
不,基于位置的索引具有pandas
数据结构的包含端点。见Caveats and Gotchas.
与切片中的标准Python序列切片相比 端点不包括在内,基于标签的pandas切片是包容性的。 这样做的主要原因是通常不可能轻易实现 确定特定标签后的“后继者”或下一个元素 索引。
如果您使用基于整数位置的索引,例如iloc
,则其行为类似于vanilla python
数据结构:
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]:
答案 1 :(得分:1)
切片通常包含在第一个索引上,而排除在第二个索引上。例如:
x = [1,2,3,4,5]
print x[0:0]
# prints [], the empty list.
但是,在文档中明确表示开始和结束索引都包含loc
函数:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html
带有标签的切片对象,例如'a':'f'(注意与通常相反 python切片,包括开始和停止!)。
为什么熊猫想要像你这样哄骗你?只有天知道。