我所做的所有研究都指向使用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
注意:我确实知道执行loc
或iloc
会通过索引和位置返回行。我不是基于此功能进行比较。
但是在过滤时,执行“ where
”子句与不使用loc
有什么区别?如果有的话。为什么我遇到的有关该主题的所有示例都使用loc
?
答案 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 (根据某些条件设置值)