为什么基于 iLocation 的布尔索引不起作用?

Yan*_*kee 4 python pandas

我试图过滤一个 Dataframe 并认为如果 aloc将布尔列表作为过滤器的输入,它也应该适用于iloc. 例如。

import pandas as pd
df = pd.read_csv('https://query.data.world/s/jldxidygjltewualzthzkaxtdrkdvq')

df.iloc[[True,False,True]] #works
df.loc[[True,False,True]] #works

df.loc[df['PointsPerGame'] > 10.0] #works
df.iloc[df['PointsPerGame'] > 10.0] # DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

文档指出 和 都loc接受iloc布尔数组作为参数。

对于国际洛克 国际劳工组织

对于洛克 洛克

所以,我相信这不起作用纯粹是因为它没有实现,或者这是因为我无法理解的其他原因?

jez*_*ael 6

这不是错误

这是根据定义不允许的。.iloc纯粹是位置性的,因此与传递的 Series 对齐是没有意义的(这是所有索引操作所做的)。

您需要将 mask 转换为 numpy 数组iloc,因为loc它也可以工作,但不是必需的:

df.iloc[(df['PointsPerGame'] > 10.0).values]
Run Code Online (Sandbox Code Playgroud)