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的Flask框架中实现单元测试的教程

    在Python的Flask框架中实现单元测试的教程

    这篇文章主要介绍了在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下
    2015-04-04
  • python用列表生成式写嵌套循环的方法

    python用列表生成式写嵌套循环的方法

    今天小编就为大家分享一篇python用列表生成式写嵌套循环的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python中文文本切词Kmeans聚类

    python中文文本切词Kmeans聚类

    这篇文章主要为大家介绍了python中文文本切词Kmeans聚类的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • python版本五子棋的实现代码

    python版本五子棋的实现代码

    五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题。这篇文章主要介绍了python版本五子棋的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Python装饰器用法实例总结

    Python装饰器用法实例总结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念、功能、使用方法及相关注意事项,需要的朋友可以参考下
    2018-02-02
  • Python多线程使用方法详细讲解

    Python多线程使用方法详细讲解

    这篇文章主要介绍了Python中的多线程实例,一个CPU,将时间切成一片一片的,CPU轮转着去处理一件一件的事情,到了规定的时间片就处理下一件事情,更多的相关内容需要的小伙伴可以参考下面文章详细
    2022-10-10
  • Win10+python3.6+git运行出现问题的解决

    Win10+python3.6+git运行出现问题的解决

    这篇文章主要介绍了Win10+python3.6+git运行出现问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python任务调度模块APScheduler使用

    Python任务调度模块APScheduler使用

    这篇文章主要介绍了Python任务调度模块APScheduler使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python中无限循环需要什么条件

    Python中无限循环需要什么条件

    在本篇文章里小编给大家分享的是关于Python中无限循环的条件的相关文章,需要的朋友们可以参考下。
    2020-05-05
  • Python爬虫实现百度图片自动下载

    Python爬虫实现百度图片自动下载

    这篇文章主要介绍了Python爬虫实现百度图片自动下载的方法以及相关代码分析,对此有兴趣的朋友参考下。
    2018-02-02

最新评论