首页 > 解决方案 > 数据帧上的索引/切片方法

问题描述

我可以看到有 2/3 的索引方式。iloc、loc 和 ix(我猜在早期版本中有)。在试验过程中,我发现了另一种可行的方法。想要澄清一下,为什么它起作用了?当用户没有指定任何内容时, loc 是默认方法吗?

import pandas as pd
import seaborn as sns
iris = sns.load_dataset("iris")

iris[iris['species']=="setosa"].head()iris.loc[iris.species == "setosa"].head()给出相同的结果

   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

我检查了虹膜类型也是pandas.core.frame.DataFrame

标签: pythonpython-3.xpandas

解决方案


这两个给出相同的结果,因为loc可以使用布尔系列或布尔数组。

所以当你给布尔系列(iris['species']=="setosa")

(iris['species']=="setosa")
0       True
1       True
2       True
3       True
4       True
       ...  
145    False
146    False
147    False
148    False
149    False
Name: species, Length: 150, dtype: bool

(iris[iris['species']=="setosa"]iris.loc[iris.species == "setosa"]) 都在进行布尔索引

虽然iloc,仅适用于 Boolean array,因此,要使用iloc相同的掩码,您可以将 Boolean Series 传递给 numpy 数组:

iris.iloc[(iris['species']=="setosa").values].head()

推荐阅读