df.iloc[]

267 阅读4分钟

pandas.DataFrame.iloc[] 是 Pandas 中用于按 位置(而非标签)来进行行和列选择的功能。它允许基于行列的整数位置来索引数据。与 .loc[] 不同,iloc[] 仅接受 整数位置整数位置的切片

基本语法

DataFrame.iloc[row_indexer, column_indexer]
  • row_indexer:选择行的整数位置(可以是整数、切片、整数列表等)。
  • column_indexer:选择列的整数位置(同样可以是整数、切片、整数列表等)。

1. 按整数位置选择单行单列

你可以通过整数位置选择单个元素,索引是从 0 开始的。

示例:选择单行单列

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 选择第1行(索引为0)和第2列(索引为1)
result = df.iloc[0, 1]
print(result)  # 输出: 4

解释

  • 0 表示选择第一行(行索引位置从 0 开始)。
  • 1 表示选择第二列(列索引位置从 0 开始)。

2. 按整数位置选择多行或多列

你可以使用切片语法来选择多行或多列。

示例:选择多行和多列

# 选择前两行(索引 0 到 1)和前两列(索引 0 到 1)
result = df.iloc[0:2, 0:2]
print(result)

输出

   A  B
0  1  4
1  2  5

解释

  • 0:2 表示选择第 1 行到第 2 行(不包括第 2 行的索引,和 Python 切片的习惯一致)。
  • 0:2 表示选择第 1 列和第 2 列(同样的切片逻辑)。

3. 使用列表选择多行或多列

你可以使用整数位置的 列表 来选择多个不连续的行或列。

示例:选择多个不连续的行或列

# 选择第 1 行和第 3 行,第 2 列和第 1 列
result = df.iloc[[0, 2], [1, 0]]
print(result)

输出

   B  A
0  4  1
2  6  3

解释

  • iloc[[0, 2], [1, 0]] 表示选择第 1 行和第 3 行,以及第 2 列和第 1 列。

4. 选择单行或单列

如果只需要选择一行或一列,可以将 iloc[] 中的列索引或行索引部分设为单个整数。

示例:选择单行

# 选择第 2 行(索引为 1)
result = df.iloc[1]
print(result)

输出

A    2
B    5
Name: 1, dtype: int64

示例:选择单列

# 选择第 1 列(索引为 0)
result = df.iloc[:, 0]
print(result)

输出

0    1
1    2
2    3
Name: A, dtype: int64

解释

  • df.iloc[1] 选择的是第 2 行,结果是该行的 所有列
  • df.iloc[:, 0] 选择的是第 1 列,结果是该列的 所有行

5. 使用负索引

和 Python 的列表切片一样,iloc[] 支持负索引来从 末尾 选择行或列。

示例:使用负索引选择行或列

# 选择倒数第二行和倒数第二列
result = df.iloc[-2, -2]
print(result)  # 输出: 2

解释

  • -2 表示倒数第二行或倒数第二列。

6. 与 loc[] 配合使用

虽然 loc[]iloc[] 在功能上类似,但它们的区别是:loc[] 使用 标签 索引(如行和列的标签),而 iloc[] 使用 位置 索引。可以根据需要选择合适的索引方法。

示例:按位置选择行,按标签选择列

# 选择第 1 行(索引 0),和列 'A'(通过标签选择)
result = df.iloc[0, df.columns.get_loc('A')]
print(result)  # 输出: 1

解释

  • df.columns.get_loc('A') 获取列标签 A 在 DataFrame 中的位置(索引 0),然后在 iloc[] 中使用该位置来选择对应列。

7. 修改值

.loc[] 一样,iloc[] 也可以用来修改 DataFrame 中的值。

示例:修改单个值

# 将第 2 行第 1 列的值修改为 100
df.iloc[1, 0] = 100
print(df)

输出

     A  B
0    1  4
1  100  5
2    3  6

8. 使用 .iloc[] 选择与切片

可以用 .iloc[] 选择和切片操作类似,选择所有行或所有列,或使用布尔切片。

示例:选择所有行的特定列

# 选择所有行的第 1 列和第 2 列
result = df.iloc[:, 0:2]
print(result)

输出

     A  B
0    1  4
1  100  5
2    3  6

总结

  • 按位置选择数据iloc[] 使用行列的整数位置索引,位置从 0 开始。
  • 行选择:可以使用整数索引、切片或整数列表选择多行。
  • 列选择:可以使用整数索引、切片或整数列表选择多列。
  • 修改数据iloc[] 可以用来修改特定行列的值。
  • 负索引:支持负数索引,表示从末尾开始的行或列。
  • 切片行为:和 Python 切片类似,包含起始位置但不包含结束位置。

iloc[] 非常适合需要通过整数位置进行索引、选择或修改 DataFrame 数据的场景,尤其是在数据处理或分析时需要按位置快速提取数据时。