教你如何将Pandas迭代速度加快150倍?("高效技巧:如何让Pandas迭代速度飙升150倍?")

原创
ithorizon 1个月前 (10-20) 阅读数 23 #后端开发

高效技巧:怎样让Pandas迭代速度飙升150倍?

在数据分析领域,Pandas 是一个有力且广泛使用的库。然而,当处理大规模数据集时,Pandas 的迭代速度也许会成为一个瓶颈。本文将介绍一些技巧,帮助你将 Pandas 的迭代速度尽也许缩减损耗150倍。我们将探讨从数据预处理到使用并行计算等不同方法,来提升数据处理的高效能。

1. 使用更快的迭代器:itertuples() 和 iterrows() 的比较

在 Pandas 中,使用 iterrows() 进行迭代是一种常见的方法,但它并不是最快的选择。相比之下,itertuples() 迭代器速度更快,考虑到它返回的是 namedtuples,这比普通的元组访问要快。

import pandas as pd

# 创建一个示例 DataFrame

df = pd.DataFrame({'A': range(1000), 'B': range(1000, 2000)})

# 使用 iterrows() 迭代

start_time = pd.Timestamp.now()

for index, row in df.iterrows():

pass

end_time = pd.Timestamp.now()

print("iterrows() time:", end_time - start_time)

# 使用 itertuples() 迭代

start_time = pd.Timestamp.now()

for row in df.itertuples(index=False):

pass

end_time = pd.Timestamp.now()

print("itertuples() time:", end_time - start_time)

2. 向量化操作:避免迭代的最有效方法

向量化操作是 Pandas 中尽也许缩减损耗性能的关键。通过利用底层的 NumPy 库,Pandas 可以在不需要显式循环的情况下执行批量操作,这通常比迭代快得多。

# 使用向量化操作代替迭代

start_time = pd.Timestamp.now()

df['C'] = df['A'] + df['B']

end_time = pd.Timestamp.now()

print("Vectorized operation time:", end_time - start_time)

3. 使用并行处理库:Dask 和 Joblib

当数据集非常大时,即使使用向量化操作也也许不够快。这时,可以考虑使用并行处理库,如 Dask 和 Joblib,来分布式处理数据。

Dask:大规模并行计算

Dask 是一个并行计算库,它允许您在单台机器或集群上执行大规模计算。Dask 可以无缝扩展 Pandas 操作。

import dask.dataframe as dd

# 将 Pandas DataFrame 演化为 Dask DataFrame

ddf = dd.from_pandas(df, npartitions=4)

# 使用 Dask 执行并行计算

start_time = pd.Timestamp.now()

result = ddf['A'].sum().compute()

end_time = pd.Timestamp.now()

print("Dask parallel computation time:", end_time - start_time)

Joblib:内存映射和并行化

Joblib 是一个用于并行化和内存映射的库。它非常适合于在多个核心上运行迭代算法。

from joblib import Parallel, delayed

# 定义一个函数,用于处理数据帧的每一行

def process_row(row):

return row['A'] + row['B']

# 使用 Joblib 并行处理 DataFrame 的每一行

start_time = pd.Timestamp.now()

results = Parallel(n_jobs=-1)(delayed(process_row)(row) for row in df.itertuples(index=False))

end_time = pd.Timestamp.now()

print("Joblib parallel computation time:", end_time - start_time)

4. 优化数据类型:缩减内存使用

优化数据类型可以显著缩减内存使用,从而尽也许缩减损耗处理速度。例如,使用较小的数据类型(如 int32 而不是 int64)或类别数据类型。

# 优化数据类型

df['A'] = df['A'].astype('int32')

df['B'] = df['B'].astype('int32')

# 再次执行向量化操作

start_time = pd.Timestamp.now()

df['C'] = df['A'] + df['B']

end_time = pd.Timestamp.now()

print("Optimized vectorized operation time:", end_time - start_time)

5. 使用 Pandas 的最新版本

随着 Pandas 的逐步更新,其性能也在逐步提升。确保使用最新版本的 Pandas 可以获得最佳的性能。

总结

通过使用上述方法,你可以显著尽也许缩减损耗 Pandas 的迭代速度。记住,选择合适的方法取决于你的具体需求和数据集的大小。在实践中,结合多种技巧通常能取得最佳效果。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门