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

 更新时间:2025年09月15日 08:51:38   作者:袁袁袁袁满  
Pandas遍历DataFrame有多种方法:iterrows(返回Series,适合需索引)、itertuples(命名元组,高性能)、apply(向量化计算)、df.values(最快但无列名),最佳实践是优先使用向量化操作,避免逐行遍历,大数据推荐dask或swifter加速,下面由小编给大家详细说说

在 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. 使用 loc 或 iloc 访问特定行

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 的优势在于 向量化计算

到此这篇关于Pandas遍历DataFrame每一行的多种方法的文章就介绍到这了,更多相关Pandas遍历DataFrame每一行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中Socket编程底层原理解析与应用实战

    Python中Socket编程底层原理解析与应用实战

    Socket编程是网络通信的基础,Python通过内置的socket模块提供了强大的网络编程接口,本文将结合实际案例,详细介绍Python中Socket编程的基本概念、常用方法和实际应用,需要的朋友可以参考下
    2024-08-08
  • Python并行编程多线程锁机制Lock与RLock实现线程同步

    Python并行编程多线程锁机制Lock与RLock实现线程同步

    这篇文章主要为大家介绍了Python并行编程多线程锁机制Lock与RLock实现线程同步示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Windows自动化重启python脚本的方法详解

    Windows自动化重启python脚本的方法详解

    小编最近遇到一个需求,每天都需要定时重启一个python脚本,这个脚本是跑在windows电脑上的,本文小编整理了三个实用的方法,大家可以参考一下
    2025-04-04
  • Pytorch Conda环境下载慢换源/删源/恢复默认源的简单操作

    Pytorch Conda环境下载慢换源/删源/恢复默认源的简单操作

    随着实验增多,需要分割创建环境的情况时有出现,在此情况下使用conda create --name xx python=3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y这样的指令创建时如果不换源,往往下载速度很慢,本文介绍了解决办法,需要的朋友可以参考下
    2024-07-07
  • 深入学习python多线程与GIL

    深入学习python多线程与GIL

    这篇文章主要介绍了深入学习python多线程与GIL,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Django模板报TemplateDoesNotExist异常(亲测可行)

    Django模板报TemplateDoesNotExist异常(亲测可行)

    这篇文章主要介绍了Django模板报TemplateDoesNotExist异常(亲测可行),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python django 增删改查操作 数据库Mysql

    python django 增删改查操作 数据库Mysql

    下面小编就为大家带来一篇python django 增删改查操作 数据库Mysql。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Python中XML转JSON、XML转字典代码示例

    Python中XML转JSON、XML转字典代码示例

    大家都知道python的字典和json类似,那么可不可以先将xml转换成json再去做其他的事情呢,下面这篇文章主要给大家介绍了关于Python中XML转JSON、XML转字典的相关资料,需要的朋友可以参考下
    2024-02-02
  • python通过伪装头部数据抵抗反爬虫的实例

    python通过伪装头部数据抵抗反爬虫的实例

    下面小编就为大家分享一篇python通过伪装头部数据抵抗反爬虫的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • pytest进阶教程之fixture函数详解

    pytest进阶教程之fixture函数详解

    这篇文章主要给大家介绍了关于pytest进阶教程之fixture函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论