现在位置: 首页 > Pandas 教程 > 正文

Pandas df.iloc[] 函数

Pandas 常用函数 Pandas 常用函数


iloc[] 是 Pandas 中基于整数位置(Integer Location)的索引方式,用于通过行号和列号来选择数据。它与 loc[] 不同,iloc[] 完全基于数据的位置(从 0 开始的整数索引),而不考虑数据本身设置的标签。

当你需要按位置选择数据,或者在不知道具体索引标签的情况下选择数据时,iloc[] 是最佳选择。它的工作方式与 Python 列表的索引非常相似,对 Python 用户来说非常直观。


基本语法与参数

iloc[] 是 DataFrame 的索引器,通过方括号 [] 来访问。它只接受整数、整数列表、整数切片或布尔数组作为参数。

语法格式

# 选择单行(返回 Series)
DataFrame.iloc[行号]

# 选择多行(返回 DataFrame)
DataFrame.iloc[[行号1, 行号2, ...]]

# 使用切片选择连续行
DataFrame.iloc[起始行:结束行]

# 选择行和列
DataFrame.iloc[行号, 列号]
DataFrame.iloc[行切片, 列切片]
DataFrame.iloc[行列表, 列列表]

参数说明

参数位置 参数类型 说明
第一个参数(行) 整数、整数列表、整数切片、布尔数组 用于选择行,基于位置(从 0 开始)。
第二个参数(列) 整数、整数列表、整数切片 可选,用于选择列,同样基于位置。

返回值说明

  • 单个元素: 返回标量值。
  • 单行: 返回一个 Series。
  • 多行: 返回一个 DataFrame。
  • 行列组合: 根据选择结果返回 Series 或 DataFrame。

实例

让我们通过丰富的例子全面掌握 iloc[] 的用法。

示例 1:基础用法 - 选择行

iloc[] 使用基于位置的索引,与 Python 列表的索引方式非常相似。

实例

import pandas as pd

# 创建示例 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [18, 19, 17, 18, 20],
    'score': [85, 92, 78, 90, 88],
    'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)

print("原始 DataFrame:")
print(df)
print()

# 选择第一行(索引 0)
print("选择第一行(位置 0):")
print(df.iloc[0])
print()

# 选择多行
print("选择第 1、3、4 行:")
print(df.iloc[[1, 3, 4]])
print()

# 使用切片选择连续的行(注意:iloc 的切片是左闭右开的,与 Python 相同)
print("选择第 1 行到第 3 行(位置 1、2、3):")
print(df.iloc[1:4])
print()

# 选择前 3 行
print("前 3 行:")
print(df.iloc[:3])

运行结果:

原始 DataFrame:
      name  age  score grade
0    Alice   18     85     A
1      Bob   19     92     A
2  Charlie   17     78     B
3    David   18     90     A
4      Eve   20     88     B

选择第一行(位置 0):
name      Alice
age          18
score        85
grade         A
Name: 0, dtype: object

选择第 1、3、4 行:
    name  age  score grade
1      Bob   19     92     A
3    David   18     90     A
4      Eve   20     88     B

选择第 1 行到第 3 行(位置 1、2、3):
      name  age  score grade
1      Bob   19     92     A
2  Charlie   17     78     B
3    David   18     90     A

前 3 行:
      name  age  score grade
0    Alice   18     85     A
1      Bob   19     92     A
2  Charlie   17     78     B

代码解析:

  1. df.iloc[0] 选择第一行(位置 0),返回一个 Series。
  2. iloc[] 的切片是左闭右开的,包含位置 1、2、3,不包括位置 4。
  3. df.iloc[[1, 3, 4]] 选择多个特定位置的行。
  4. df.iloc[:3] 省略起始位置表示从 0 开始。

示例 2:选择特定的行列

iloc[] 可以同时选择行和列,通过位置编号精确定位。

实例

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [18, 19, 17, 18, 20],
    'score': [85, 92, 78, 90, 88],
    'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)

# 选择单个单元格(第二行、第三列)
print("选择位置 [1, 2] 的单元格:")
print(df.iloc[1, 2])  # 返回 92
print()

# 选择特定行的特定列
print("选择第 0 行的第 1 和第 3 列:")
print(df.iloc[0, [1, 3]])
print()

# 选择多行多列
print("选择第 0、2、4 行的第 0、2 列:")
print(df.iloc[[0, 2, 4], [0, 2]])
print()

# 选择所有行的特定列
print("所有行的第 0 和第 2 列:")
print(df.iloc[:, [0, 2]])
print()

# 行切片和列切片结合
print("第 1 到 3 行的第 0 到第 2 列(不含):")
print(df.iloc[1:4, :3])

运行结果:

选择位置 [1, 2] 的单元格:
92

选择第 0 行的第 1 和第 3 列:
age      19
grade     A
Name: 0, dtype: object

选择第 0、2、4 行的第 0、2 列:
      name  score
0    Alice     85
2  Charlie   78
4      Eve    88

所有行的第 0 和第 2 列:
      name  score
0    Alice     85
1      Bob    92
2  Charlie   78
3    David   90
4     Eve    88

第 1 到 3 行的第 0 到第 2 列(不含):
      name  age
1      Bob   19
2  Charlie 17
3    David   18

代码解析:

  1. df.iloc[1, 2] 选择单个单元格,返回标量值。
  2. df.iloc[0, [1, 3]] 选择特定行的多列。
  3. df.iloc[:, [0, 2]] 冒号表示选择所有行。
  4. iloc[] 的切片遵循 Python 惯例,左闭右开(不含结束位置)。

示例 3:与自定义索引结合使用

当 DataFrame 有自定义索引时,iloc[] 仍然按照位置选择数据,与索引标签无关。

实例

import pandas as pd

# 创建带自定义索引的 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [18, 19, 17, 18, 20],
    'score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])

print("带自定义索引的 DataFrame:")
print(df)
print()

# iloc 仍然按位置选择,不受自定义索引影响
print("iloc[0] 选择第一行(位置 0):")
print(df.iloc[0])
print()

print("iloc[1:3] 选择第 2、3 行(位置 1、2):")
print(df.iloc[1:3])
print()

# 使用负数索引(从末尾开始计数)
print("最后一行(位置 -1):")
print(df.iloc[-1])
print()

print("倒数 3 行:")
print(df.iloc[-3:])

运行结果:

带自定义索引的 DataFrame:
   name  age  score
a  Alice   18     85
b    Bob   19     92
c  Charlie 17     78
d  David   18     90
e    Eve   20     88

iloc[0] 选择第一行(位置 0),与标签 'a', 'b', 'c' 无关:
name      Alice
age          18
score        85
Name: a, dtype: object

iloc[1:3] 选择第 2、3 行(位置 1、2):
      name  age  score
b    Bob   19     92
c  Charlie 17     78

最后一行(位置 -1):
name     Eve
age       20
score     88
Name: e, dtype: object

倒数 3 行:
      name  age  score
c  Charlie   17     78
d    David   18     90
e      Eve   20     88

代码解析:

  • 即使 DataFrame 使用自定义索引('a', 'b', 'c', 'd', 'e'),iloc[] 仍然按照位置选择。
  • iloc[0] 总是选择第一行(物理位置),不论索引标签是什么。
  • iloc 支持负数索引,-1 表示最后一行,-2 表示倒数第二行,以此类推。

示例 4:使用布尔数组选择

iloc[] 也支持使用布尔数组进行选择,这在条件筛选中很有用。

实例

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [18, 19, 17, 18, 20],
    'score': [85, 92, 78, 90, 88],
    'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)

# 使用布尔数组选择
bool_array = [True, False, True, False, True]
print("使用布尔数组 [True, False, True, False, True] 选择的行:")
print(df.iloc[bool_array])
print()

# 结合条件使用(先计算布尔数组,再用于 iloc)
# 选择分数大于 85 的行
condition = df['score'] > 85
print("分数大于 85 的行:")
print(df.iloc[condition.values])  # 获取布尔数组
print()

# 选择特定位置的行后,再选择特定列
print("第 1、3 行的第 1、2 列:")
print(df.iloc[[1, 3], 1:3])

运行结果:

使用布尔数组 [True, False, True, False, True] 选择的行:
      name  age  score grade
0    Alice   18     85     A
2  Charlie   17     78     B
4      Eve   20     88     B

分数大于 85 的行:
      name  age  score grade
1      Bob   19     92     A
3    David   18     90     A
4      Eve   20     88     B

第 1、3 行的第 1、2 列:
      age  score
1     19     92
3     18     90

代码解析:

  1. 布尔数组的长度必须与行数(对于行选择)或列数(对于列选择)相同。
  2. iloc 使用布尔数组时,与 loc[] 的条件筛选不同,它直接按位置选择。
  3. 可以通过切片步长来选择特定的模式,比如每隔一行选择一次。

注意事项

  • iloc[] 使用的是位置索引,切片遵循 Python 惯例(左闭右开)。
  • 如果传入的位置超出范围,会抛出 IndexError 错误。
  • 支持负数索引,-1 表示最后一行,-2 表示倒数第二行。
  • loc[] 不同,iloc[] 不支持使用条件表达式直接筛选,需要先计算布尔数组。

重要提示:loc[]iloc[] 的区别是 Pandas 学习中的重点。loc[] 基于标签,iloc[] 基于位置。在开发时建议明确区分两者,避免混淆导致错误。


小结

iloc[] 是 Pandas 中基于整数位置的数据选择器,它提供了与 Python 列表相似的索引体验。它的主要特点是完全基于数据的位置(从 0 开始),不受自定义索引标签的影响。

在实际使用中,iloc[] 特别适合以下场景:需要按位置选择数据时、需要使用负数索引时、需要使用切片步长时、以及在不确定索引标签的情况下选择数据。结合 loc[]iloc[],可以灵活应对各种数据选择需求。

Pandas 常用函数 Pandas 常用函数