Pandas遍历DataFrame的每一行有多种方法

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在 Pandas 中,遍历 DataFrame 的每一行有多种方法,每种方法适用于不同的场景。以下是常见的几种方式及其适用场景:


1. iterrows() - 返回索引和行数据(Series)

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['x', 'y', 'z']})

for index, row in df.iterrows():
    print(f"索引: {index}, A列值: {row['A']}, B列值: {row['B']}")

特点

  • 返回 (index, Series) 对,row 是 Pandas Series 对象。
  • 缺点:性能较差(因为 row 是 Series,不是原生 Python 类型)。
  • 适用场景:需要访问行索引和少量数据时。

2. itertuples() - 返回命名元组(更快)

for row in df.itertuples():
    print(f"索引: {row.Index}, A列值: {row.A}, B列值: {row.B}")

特点

  • 返回 namedtuple,访问列名更方便(如 row.A 而不是 row['A'])。
  • 优点:比 iterrows() 快很多(因为直接操作元组)。
  • 适用场景:需要高性能遍历,且不需要修改数据。

3. apply() - 对每行应用函数(推荐)

def process_row(row):
    return f"A={row['A']}, B={row['B']}"

df.apply(process_row, axis=1)  # axis=1 表示按行应用

特点

  • 使用向量化操作,比 iterrows() / itertuples() 更快。
  • 适用场景:需要对每行进行计算并返回新数据。

4. items() - 遍历列(而非行)

for col_name, col_data in df.items():
    print(f"列名: {col_name}")
    print(f"列数据:\n{col_data}")

特点

  • 遍历的是 而不是行。
  • 适用场景:需要按列处理数据时。

5. 直接转换为 NumPy 数组(最快)

for row in df.values:  # 或 df.to_numpy()
    print(f"A={row[0]}, B={row[1]}")  # 按列索引访问

特点

  • 直接操作 NumPy 数组,速度最快。
  • 缺点:丢失列名,只能按索引访问。
  • 适用场景:需要极致性能,且不需要列名。

6. 使用 lociloc 访问特定行

for i in range(len(df)):
    print(df.loc[i, 'A'])  # 按标签访问
    print(df.iloc[i, 0])   # 按位置访问

特点

  • 适用于随机访问特定行。
  • 缺点:性能较差(每次调用 loc / iloc 都有开销)。

性能对比

方法速度适用场景
itertuples()⭐⭐⭐⭐高性能遍历
apply()⭐⭐⭐向量化操作
iterrows()需要索引时
df.values⭐⭐⭐⭐⭐极致性能(无列名)
loc / iloc随机访问

最佳实践

  1. 尽量避免逐行遍历,优先使用 Pandas 的向量化操作(如 df['A'] * 2)。
  2. 如果必须遍历
    • 需要列名 → itertuples()
    • 需要极致性能 → df.valuesto_numpy()
    • 需要修改数据 → iterrows()apply()
  3. 大数据处理:考虑 daskswifter 加速。

示例:修改 DataFrame 的某一列

# 方法1:使用 iterrows()(不推荐,慢)
for index, row in df.iterrows():
    df.loc[index, 'B'] = row['B'] + '_modified'

# 方法2:使用 apply()(推荐)
df['B'] = df['B'].apply(lambda x: x + '_modified')

# 方法3:向量化操作(最快)
df['B'] = df['B'] + '_modified'

总结

需求推荐方法
高性能遍历itertuples()
需要修改数据apply()iterrows()
极致性能df.values
向量化计算直接使用 Pandas/NumPy 操作

尽量避免逐行遍历,Pandas 的优势在于 向量化计算

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小满大王i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值