我试图过滤一个数据框,并认为如果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
python - 为什么基于iLocation的 bool 索引无法工作?-LMLPHP

对于loc
python - 为什么基于iLocation的 bool 索引无法工作?-LMLPHP

因此,我认为这纯粹是由于未实现而不能起作用,还是因为我无法理解的其他原因?

最佳答案

不是bug


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


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

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

关于python - 为什么基于iLocation的 bool 索引无法工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59016143/

10-12 04:49