布尔索引的Pandas,loc和non loc

时间:2018-11-14 09:44:58

标签: python python-3.x pandas dataframe where

我所做的所有研究都指向使用loc作为通过col(s)值筛选数据框的方式,今天我正在阅读this,并从我的例子中发现了经过测试,按其值过滤cols时,实际上并不需要loc

EX:

df = pd.DataFrame(np.arange(0, 20, 0.5).reshape(8, 5), columns=['a', 'b', 'c', 'd', 'e'])    

df.loc[df['a'] >= 15]

      a     b     c     d     e
6  15.0  15.5  16.0  16.5  17.0
7  17.5  18.0  18.5  19.0  19.5

df[df['a'] >= 15]

      a     b     c     d     e
6  15.0  15.5  16.0  16.5  17.0
7  17.5  18.0  18.5  19.0  19.5

注意:我确实知道执行lociloc会通过索引和位置返回行。我不是基于此功能进行比较。

但是在过滤时,执行“ where”子句与不使用loc有什么区别?如果有的话。为什么我遇到的有关该主题的所有示例都使用loc

1 个答案:

答案 0 :(得分:3)

根据文档,loc接受用于选择行的布尔数组,并且在您的情况下

>>> df['a'] >= 15
>>> 
0    False
1    False
2    False
3    False
4    False
5    False
6     True
7     True
Name: a, dtype: bool

被视为布尔数组。

loc的作者韦斯·麦金尼(Wes McKinney)认为,您可以在此处省略df[df['a'] >= 15]并签发pandas的事实是一种特殊情况的方便。

直接引自他的书Python for Data Analysis,第p。 144,df[val]用于...

  

从DataFrame中选择单列或列序列; 特殊情况   便利:布尔数组(过滤器行),切片(切片行)或布尔DataFrame   (根据某些条件设置值)