我试图过滤一个数据帧,并认为如果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
都接受布尔数组作为参数。
所以,我认为这纯粹是由于未实现而无法实现,还是因为我无法理解的其他原因?
答案 0 :(得分:1)
不是bug:
这不是按定义的。 .iloc 纯粹是位置上的,因此与传递的Series对齐(这是所有索引操作所要做的)是没有意义的。
对于iloc
,您需要将mask转换为numpy数组,对于loc
,它也可以工作,但不是必须的:
df.iloc[(df['PointsPerGame'] > 10.0).values]