我试图过滤一个数据框,并认为如果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
该文档指出
loc
和iloc
都接受布尔数组作为参数。对于iloc
对于loc
因此,我认为这纯粹是由于未实现而不能起作用,还是因为我无法理解的其他原因?
最佳答案
不是bug:
不允许按定义。 .iloc只是位置上的,因此与传递的Series对齐是没有意义的(这是所有索引操作所要做的)。
您需要将iloc
的mask转换为numpy数组,因为loc
它也可以工作,但不是必须的:
df.iloc[(df['PointsPerGame'] > 10.0).values]
关于python - 为什么基于iLocation的 bool 索引无法工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59016143/