Python 为什么';基于位置的布尔索引工作?
我试图过滤一个数据帧,并认为如果Python 为什么';基于位置的布尔索引工作?,python,pandas,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'] > 1
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
所以,我认为这不起作用纯粹是因为它没有被实现,或者是因为我不理解的其他原因 它不是:
根据定义,这是不允许的.iloc纯粹是位置性的,因此与传递的序列对齐没有意义(所有索引操作都是这样做的)
对于iloc
,您需要将掩码转换为numpy数组,对于loc
它也可以工作,但不是必需的:
df.iloc[(df['PointsPerGame'] > 10.0).values]
谢谢,但是如果它是“纯位置的”,为什么它支持布尔数组作为输入来过滤行?例如,
df.iloc[[True,False,True]]
@Yankee-你不工作吗?因为对于我来说,使用nicedf=pd.DataFrame({'A':list('abc')})
和print(df.iloc[[True,False,True]])
No,它可以工作。我的问题是,为什么这样做?因为这是我们传递一个布尔数组作为输入(这不是“纯位置的”)@Yankee-我认为因为它是列表,所以如果传递Series
-mask=df['PointsPerGame']>10.0
和print(type(mask))