上一篇
Pandas遍历DataFrame的7种高效方法 | 数据分析教程
- Python
- 2025-07-27
- 1301
Pandas遍历DataFrame的7种高效方法
全面指南:从基础到高级技巧,提升你的数据分析效率
为什么需要高效的DataFrame遍历方法?
在数据分析中,DataFrame遍历是常见操作。选择合适的方法可以:
- 提升10-100倍的性能
- 减少内存消耗
- 使代码更简洁易读
- 避免常见的迭代陷阱
- 处理大规模数据集
- 提高开发效率
7种遍历方法详解
1. iterrows() - 逐行迭代
最常用的遍历方法,返回每行的索引和Series对象。
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
for index, row in df.iterrows():
print(f"Index: {index}, A: {row['A']}, B: {row['B']}")
优点: 简单直观,支持索引访问
缺点: 性能较差,不适用于大型数据集
适用场景: 小型数据集,简单操作
缺点: 性能较差,不适用于大型数据集
适用场景: 小型数据集,简单操作
2. itertuples() - 高性能行迭代
以命名元组形式返回行数据,性能优于iterrows()。
for row in df.itertuples():
print(f"Index: {row.Index}, A: {row.A}, B: {row.B}")
优点: 比iterrows()快得多,内存效率高
缺点: 不能直接修改DataFrame
适用场景: 大型数据集,只读操作
缺点: 不能直接修改DataFrame
适用场景: 大型数据集,只读操作
3. apply() - 逐行/列应用函数
沿DataFrame的轴应用函数,支持行或列操作。
# 逐行应用
df['sum'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
# 逐列应用
df.apply(lambda col: col.max(), axis=0)
优点: 代码简洁,内部优化
缺点: 复杂逻辑可能降低可读性
适用场景: 中等规模数据,向量化操作
缺点: 复杂逻辑可能降低可读性
适用场景: 中等规模数据,向量化操作
4. 向量化操作 - 最佳性能方案
利用pandas内置的向量化函数,避免显式循环。
# 替代循环的向量化操作
df['product'] = df['A'] * df['B']
# 使用NumPy函数
import numpy as np
df['log_A'] = np.log(df['A'])
优点: 性能最佳,简洁高效
缺点: 不适用于复杂行间逻辑
适用场景: 任何规模数据,首选方案
缺点: 不适用于复杂行间逻辑
适用场景: 任何规模数据,首选方案
5. items()/iteritems() - 列迭代
按列迭代,返回列名和列内容。
for column_name, column_data in df.items():
print(f"Column: {column_name}")
print(column_data.values)
优点: 访问整列数据
缺点: 不适合逐行操作
适用场景: 按列处理数据
缺点: 不适合逐行操作
适用场景: 按列处理数据
6. 索引直接访问 - 特定行/列
使用loc/iloc直接访问特定行或列。
# 访问特定行
row_1 = df.loc[1]
# 访问特定单元格
value = df.at[1, 'A']
优点: 灵活精确的访问控制
缺点: 不适合完整遍历
适用场景: 访问特定数据点
缺点: 不适合完整遍历
适用场景: 访问特定数据点
7. 使用Numba加速 - 超大型数据集
对于超大型数据集,使用Numba加速循环。
from numba import jit
@jit(nopython=True)
def custom_calculation(a, b):
# 复杂计算逻辑
return result
# 应用加速函数
results = [custom_calculation(a, b) for a, b in zip(df['A'], df['B'])]
优点: 处理超大型数据集性能极佳
缺点: 增加额外依赖,配置复杂
适用场景: 千万行以上数据集
缺点: 增加额外依赖,配置复杂
适用场景: 千万行以上数据集
性能对比
方法 | 10,000行耗时 | 100,000行耗时 | 内存使用 | 推荐指数 |
---|---|---|---|---|
向量化操作 | ~1ms | ~5ms | 最低 | ★★★★★ |
itertuples() | ~100ms | ~1s | 低 | ★★★★ |
apply() | ~50ms | ~500ms | 中 | ★★★★ |
iterrows() | ~500ms | ~5s | 高 | ★★ |
测试环境: Python 3.9, pandas 1.3, 8GB RAM
最佳实践建议
优先选择向量化操作
在大多数情况下,向量化操作是最佳选择。利用pandas和NumPy的内置函数可以显著提高性能。
避免逐行修改DataFrame
在循环中逐行修改DataFrame效率极低。应收集结果后一次性赋值或使用assign()方法。
使用适当的数据类型
优化数据类型(如使用category分类、int32代替int64)可以提升遍历性能。
掌握这些DataFrame遍历技巧,将使你的数据分析代码更高效、更专业!
本文由CaoWa于2025-07-27发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256600.html
发表评论