Python中如何遍历DataFrame的行?

2025-05-18 5

Image

在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一。当我们需要逐行处理数据时,如何高效遍历DataFrame的行就成了一个关键问题。5种主流的遍历方法,并通过性能对比和实际示例帮助你选择最适合业务场景的方案。


1. 使用iterrows()方法

iterrows()是Pandas内置的行遍历方法,会返回一个生成器,每次迭代包含行索引和行数据的Series对象:

import pandas as pd

df = pd.DataFrame({'A': [1,2], 'B': [3,4]})
for index, row in df.iterrows():
    print(f"Index: {index}, A: {row['A']}, B: {row['B']}")

特点:

  • 保留行索引信息
  • 返回的Series对象会复制数据,内存开销较大
  • 适合需要索引的小型数据集

2. 高效的itertuples()方法

itertuples()以命名元组形式返回行数据,性能明显优于iterrows():

for row in df.itertuples():
    print(f"Index: {row.Index}, A: {row.A}, B: {row.B}")  # 注意属性访问方式

优势:

  • 比iterrows()快3-5倍
  • 内存占用更低
  • 不支持列名包含空格等特殊字符

3. 向量化操作优先原则

在大多数情况下,应尽量避免显式循环,改用Pandas内置的向量化操作:

# 替代遍历的方案
df['C'] = df['A'] + df['B']  # 直接列运算
df.apply(lambda x: x['A']*2, axis=1)  # 按行apply

适用场景:

  • 数学运算
  • 条件判断
  • 类型转换等批量操作

4. 使用items()进行列优先遍历

当需要列向操作时,可以结合items()和行遍历:

for col_name, col_data in df.items():
    for cell in col_data:  # 遍历该列所有值
        print(cell)

典型用例:

  • 列级别的统计分析
  • 特定列的特殊处理

5. 极大数据集的优化方案

处理百万行以上数据时,可以考虑:

  • 分块处理:使用chunksize参数
for chunk in pd.read_csv('large.csv', chunksize=10000):
    process(chunk)
  • 并行计算:配合Dask或Modin库
  • 类型优化:提前转换dtype减少内存占用

性能对比

通过测试10万行DataFrame的遍历时间:

  1. 向量化操作:<10ms
  2. itertuples():约200ms
  3. iterrows():约800ms
  4. 普通for循环:>1s

建议优先选择向量化方法,必须遍历时使用itertuples()。实际项目中,建议先用少量数据测试不同方法的性能表现。

(本文地址:https://www.nzw6.com/14294.html)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关