透彻理解 pandas 切片中 df.loc ,df.iloc
-
-
1. 基本定义
- df.loc:基于标签的数据选择方法。
- df.iloc:基于位置的数据选择方法。
2. 什么是标签?什么是位置?
在深入了解这两种方法之前,我们首先要理解“标签”和“位置”这两个概念。
标签 (Label)
标签是数据框或系列的索引。这些索引可以是数字,也可以是字符串或其他数据类型。例如:
![]()
在上述例子中,
'x','y','z'就是数据框df的标签(或索引)。位置 (Position)
位置是数据框或系列中的元素的整数位置。无论索引是什么,位置始终从0开始,并按顺序递增。例如,在上述数据框
df中,'apple'的位置是 0,'banana'的位置是 1,'cherry'的位置是 2。3. df.loc vs df.iloc
让我们通过一些示例更详细地探讨这两种方法的使用。
示例 1:使用数字索引
![]()
在这个例子中,标签和位置是相同的。所以,
df.loc[0:1, 'A']和df.iloc[0:1, 0]会产生相同的结果。示例 2:使用非连续数字索引
![]()
在这种情况下,标签和位置是不同的。所以,
df.loc[2:1, 'A']选择的是标签为2和1的行,而df.iloc[0:1, 0]选择的是位置为0的行。示例 3:使用字符串索引
![]()
在这种情况下,只有
df.loc可以使用字符串索引,而df.iloc只能使用整数位置。
最后,举一个相同数字的命令,注意输出的不同,且注意 index_col="Date" 参数的影响。 -
![]()
注意,如把读入的数据改成设置index成日期,df.loc必须用 Date 访问,例子如下:
![]()
上面可以看出,df = pd.read_csv('SH#600000.csv',index_col="Date") 加入了 index_col="Date" 选项,指定了 index是日期,不再是默认的数字,必须要用 Date字符串访问。
-
问:df[['Open', 'Close']] 只选择'Open'和'Close'两列。为什么要加两层[],不加会怎么样?
-
答: 为什么要使用双层
[]?-
当你传递一个单独的列名(一个标签)给DataFrame的索引操作符
[],Pandas会返回一个Series。当你传递一个列名的列表给索引操作符[]时,Pandas会返回一个DataFrame。- 使用单层
[]返回Series:df['Open'] - 使用双层
[]返回DataFrame:df[['Open']]或df[['Open', 'Close']]
- 使用单层
-
如果不使用双层
[]会怎么样?- 如果你使用单一列名,如
df['Open'],那么返回的是一个Series。 - 如果你尝试使用多列名但不使用内部列表,如
df['Open', 'Close'],这会导致一个错误,因为Pandas不知道你试图选择哪些列
- 如果你使用单一列名,如
如下图所示:
-
-
![]()
用了a=df[["Date"]] 两个[ ]后,表示 要返回一个DataFrame格式,DataFrame包含 行列表与列列表。
-







浙公网安备 33010602011771号