4.2 基于位置的选择:iloc[] Pandas数据选择与过滤:4.2 基于位置的选择:iloc[] 的基本概念 是Pandas DataFrame对象的一个属性,它允许你使用整数位置(索引)来选择数据。与基于标签的 不同, 完全依赖于数据在DataFrame中的物理位置。这意味着你可以使用行号和列号来访问数据,而无需考虑行索引和列标签。 语法: : 指定要选择的行的整数位置或整数位置的切片。 : 指定要选择的列的整数位置或整数位置的切片。 关键点: 是基于 0 的索引,也就是说,第一行的索引是 0,第一列的索引也是 0。 在选择时遵循 Python 的切片规则,即左闭右开区间。例如, 会选择索引为 0、1 和 2 的行,但不包括索引为 3 的行。
iloc[] 的基本概念iloc[] 是Pandas DataFrame对象的一个属性,它允许你使用整数位置(索引)来选择数据。与基于标签的.loc[]不同,iloc[] 完全依赖于数据在DataFrame中的物理位置。这意味着你可以使用行号和列号来访问数据,而无需考虑行索引和列标签。
语法:
df.iloc[row_indexer, column_indexer]
row_indexer: 指定要选择的行的整数位置或整数位置的切片。
column_indexer: 指定要选择的列的整数位置或整数位置的切片。
关键点:
iloc[] 是基于 0 的索引,也就是说,第一行的索引是 0,第一列的索引也是 0。
iloc[] 在选择时遵循 Python 的切片规则,即左闭右开区间。例如,iloc[0:3] 会选择索引为 0、1 和 2 的行,但不包括索引为 3 的行。
如果只提供一个索引器,iloc[] 默认将其解释为行索引。
iloc[] 的使用方法import pandas as pd # 创建一个示例DataFrame data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 28, 22], 'City': ['New York', 'London', 'Paris', 'Tokyo']} df = pd.DataFrame(data) print("原始DataFrame:\n", df) # 选择第一行 first_row = df.iloc[0] print("\n第一行:\n", first_row) # 选择第二列(Age列) second_column = df.iloc[:, 1] print("\n第二列(Age列):\n", second_column)
输出:
原始DataFrame: Name Age City 0 Alice 25 New York 1 Bob 30 London 2 Charlie 28 Paris 3 David 22 Tokyo 第一行: Name Alice Age 25 City New York Name: 0, dtype: object 第二列(Age列): 0 25 1 30 2 28 3 22 Name: Age, dtype: int64
可以使用切片来选择多行或多列。
# 选择前两行 first_two_rows = df.iloc[0:2] print("\n前两行:\n", first_two_rows) # 选择第二列和第三列(Age和City列) second_and_third_columns = df.iloc[:, 1:3] print("\n第二列和第三列(Age和City列):\n", second_and_third_columns) # 选择1,3行和0,2列 rows_1_3_cols_0_2 = df.iloc[[1,3],[0,2]] print("\n1,3行和0,2列:\n", rows_1_3_cols_0_2)
输出:
前两行: Name Age City 0 Alice 25 New York 1 Bob 30 London 第二列和第三列(Age和City列): Age City 0 25 New York 1 30 London 2 28 Paris 3 22 Tokyo 1,3行和0,2列: Name City 1 Bob London 3 David Tokyo
iloc[] 也支持负索引,这使得从DataFrame的末尾开始选择变得容易。
# 选择最后一行 last_row = df.iloc[-1] print("\n最后一行:\n", last_row) # 选择倒数第二行和最后一列 second_last_row_last_column = df.iloc[-2, -1] print("\n倒数第二行和最后一列:\n", second_last_row_last_column)
输出:
最后一行: Name David Age 22 City Tokyo Name: 3, dtype: object 倒数第二行和最后一列: Paris
除了切片,还可以使用整数列表或NumPy数组来选择特定的行或列。
import numpy as np # 使用列表选择第1行和第3行 rows_to_select = [0, 2] selected_rows = df.iloc[rows_to_select] print("\n第1行和第3行:\n", selected_rows) # 使用NumPy数组选择第0列和第2列 cols_to_select = np.array([0, 2]) selected_cols = df.iloc[:, cols_to_select] print("\n第0列和第2列:\n", selected_cols)
输出:
第1行和第3行: Name Age City 0 Alice 25 New York 2 Charlie 28 Paris 第0列和第2列: Name City 0 Alice New York 1 Bob London 2 Charlie Paris 3 David Tokyo
# 选择第2行第1列的元素 cell_value = df.iloc[1, 0] print("\n第2行第1列的元素:\n", cell_value)
输出:
第2行第1列的元素: Bob
iloc[] 的注意事项IndexError: 如果尝试使用超出DataFrame范围的索引,iloc[] 会引发 IndexError。
与.loc[] 的区别: iloc[] 使用整数位置,而 .loc[] 使用标签。混淆两者会导致错误。
性能: 对于大型DataFrame,使用切片通常比使用列表或数组选择更有效率。
iloc[] 的应用场景数据清洗和预处理: 根据行号或列号删除不需要的数据。
特征工程: 选择特定的特征列进行分析。
机器学习: 将数据集划分为训练集和测试集。
数据可视化: 选择特定的数据子集进行可视化。
以下是一个使用Mermaid图示来总结 iloc[] 用法的例子:
图示说明:
DataFrame: 代表Pandas DataFrame对象。
iloc[]: 表示使用 iloc[] 进行选择。
Row Indexer: 指定行索引,可以是整数位置、切片、列表或数组。
Column Indexer: 指定列索引,可以是整数位置、切片、列表或数组。
Select Rows: 根据行索引选择行。
Select Columns: 根据列索引选择列。
Resulting DataFrame: 最终选择的结果DataFrame。
iloc[] 是Pandas中基于位置选择数据的强大工具。通过理解其基本概念、使用方法和注意事项,可以高效地从DataFrame中提取所需的数据。掌握 iloc[] 对于数据分析和处理至关重要,能够帮助你更轻松地完成各种数据操作任务。希望本文能够帮助你更好地理解和使用 iloc[]。