在 Pandas 中,loc
和 iloc
是用于选择和过滤数据的两种主要方法,它们的区别在于使用的索引类型。
1. loc
:基于标签索引
loc
是基于行或列的标签(label)来选择数据。它可以按行或列的名称来访问数据,也可以通过布尔索引选择。- 支持的索引类型:行标签、列标签、布尔索引。
- 语法:
DataFrame.loc[row_indexer, column_indexer]
示例
import pandas as pd# 创建示例数据
df = pd.DataFrame({'A': [1, 2, 3, 4],'B': [5, 6, 7, 8],'C': [9, 10, 11, 12]
}, index=['a', 'b', 'c', 'd'])# 使用 loc 基于行标签选择
print(df.loc['a']) # 选择标签为 'a' 的行
输出:
A 1
B 5
C 9
Name: a, dtype: int64
loc
示例用法:
- 选择行和列:使用行和列标签选择特定的元素或切片。
df.loc['b', 'A'] # 选择标签为 'b' 的行,'A' 列的元素
- 选择多个行或列:
df.loc[['a', 'b'], ['A', 'B']] # 选择 'a' 和 'b' 行的 'A' 和 'B' 列
- 布尔索引:
df.loc[df['A'] > 2] # 选择 'A' 列中大于 2 的行
2. iloc
:基于整数位置索引
iloc
是基于行或列的整数位置(即位置编号)来选择数据。它的工作方式类似于 NumPy 的数组索引方式。- 支持的索引类型:整数位置。
- 语法:
DataFrame.iloc[row_indexer, column_indexer]
示例
# 使用 iloc 基于位置选择
print(df.iloc[0]) # 选择位置为 0 的行
输出:
A 1
B 5
C 9
Name: a, dtype: int64
iloc
示例用法:
- 选择单个元素:
df.iloc[1, 0] # 选择位置为 (1, 0) 的元素
- 选择多个行或列:
df.iloc[0:2, 0:2] # 选择前两行和前两列
区别总结
特性 | loc (基于标签) | iloc (基于位置) |
---|---|---|
索引类型 | 行/列的标签(可以是字符串、日期等) | 行/列的整数位置 |
支持的索引 | 标签索引、布尔索引 | 整数位置索引 |
示例 | df.loc['a'] | df.iloc[0] |
切片 | 标签的范围包含最后一个索引(闭区间) | 索引的范围不包含最后一个位置(开区间) |
具体场景:
loc
更适合当你知道数据的标签(比如行名、列名)时,可以进行精确或基于条件的访问。iloc
更适合当你按数据的具体位置(比如第几行、第几列)进行访问时。