Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';基于位置的布尔索引工作?_Python_Pandas - Fatal编程技术网

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-你不工作吗?因为对于我来说,使用nice
df=pd.DataFrame({'A':list('abc')})
print(df.iloc[[True,False,True]])
No,它可以工作。我的问题是,为什么这样做?因为这是我们传递一个布尔数组作为输入(这不是“纯位置的”)@Yankee-我认为因为它是列表,所以如果传递
Series
-
mask=df['PointsPerGame']>10.0
print(type(mask))