Pandas DataFrame loc index

时间:2016-12-17 00:08:04

标签: 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

2 个答案:

答案 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切片,包括开始和停止!)。

为什么熊猫想要像你这样哄骗你?只有天知道。