Pandas DataFrame遍历方法

前言

在数据分析工作中,DataFrame是Pandas最核心的数据结构。虽然Pandas提供了丰富的向量化操作,但在实际业务场景中仍然会遇到需要显式遍历DataFrame的需求。本文将深入探讨5种主流的遍历方法及其性能差异。

1. iterrows()方法

基本用法


import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})

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

特点

  • 返回(index, Series)元组
  • 适合需要索引的操作
  • 性能较低(每行生成Series对象)

2. itertuples()方法


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

优势对比

方法 速度 内存占用
iterrows() 1x(基准)
itertuples() 10x

3. apply()方法


def process_row(row):
    return row['A'] * 2

df['new_col'] = df.apply(process_row, axis=1)
    

适用场景

  • 需要列方向操作时
  • 简单转换逻辑
  • 比循环更优雅的写法

4. 向量化操作


# 替代循环的最佳实践
df['new_col'] = df['A'] * 2 + df['B'].str.upper()
    

性能对比

在10万行数据测试中:

  • 向量化操作:<10ms
  • itertuples():~500ms
  • iterrows():~5s

5. 其他方法

items()遍历列


for col_name, col_data in df.items():
    print(f"Column name: {col_name}")
    print(col_data.values)
    

最佳实践建议

  1. 优先使用向量化操作
  2. 必须遍历时选择itertuples()
  3. 避免在循环中修改原始DataFrame
  4. 大数据集考虑使用Dask加速

总结

理解不同遍历方法的特性至关重要。根据数据规模(shape[0])选择合适的方法:

  • 小数据(<1k行):任意方法
  • 中数据(1k-100k):itertuples()
  • 大数据(>100k):向量化/Dask
文末声明:

您必须遵守关于,您可以随意转发/引用,但要注明原作者Leon或设置本文跳转连接,并且您必须在文中包含或提醒浏览者遵守作者声明
欢迎关注公众号获取第二手文章!高效工作法

暂无评论

发送评论 编辑评论


				
上一篇
下一篇