python - 数据帧上的索引/切片方法
问题描述
我可以看到有 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
解决方案
这两个给出相同的结果,因为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()
推荐阅读
- c# - 从循环中调用时,C# async await 方法是否并行运行?
- aws-appsync - Exception in generateClasses when building AppSync project in Debug but not Release
- python - python type.cast 在 Python 中有什么作用?
- wordpress - 带有叶子类别的 Wordpress 存档永久链接
- javascript - One Click Deploy Solution for my webapp
- string - string[] 包括 EFCore2.1
- r - R中的自定义Keras损失函数,带有case_when函数
- c# - 试图找到第 10001 个素数,c#
- c# - 'Ref' 和 'Out' 参数的内存分配,有什么区别吗?
- mysql - Why type data "long blob" in mysql read as "int8" in data explorer MATLAB?