为什么基于iLocation的布尔索引无法工作?

时间:2019-11-24 09:05:51

标签: python pandas

我试图过滤一个数据帧,并认为如果loc将布尔列表作为过滤的输入,那么它在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

文档指出lociloc都接受布尔数组作为参数。

对于iloc iloc

针对本地 loc

所以,我认为这纯粹是由于未实现而无法实现,还是因为我无法理解的其他原因?

1 个答案:

答案 0 :(得分:1)

不是bug

  

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

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

df.iloc[(df['PointsPerGame'] > 10.0).values]