
Pandas df.iterrows() 并行化
发布日期:2025-05-01 16:54:02
浏览次数:1
分类:技术文章
本文共 1088 字,大约阅读时间需要 3 分钟。
Pandas df.iterrows() 并行化
在Python中,`pandas`库提供了高效的数据处理功能,包括迭代数据结构中的行。虽然`iterrows()`方法本身并不支持并行化,但我们可以通过多线程或者异步编程等机制来实现这一目标。下面是一个使用多进程来并行化`df.iterrows()`的例子:```python
import pandas as pd from multiprocessing import Pool, cpu_count# 假设我们有一个DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data)def process_row(row):
""" 处理每行数据,这里只是简单地返回一行数据的平方 """ print(f"Processing row: {row}") result = [x**2 for x in row] # 假设我们对每一列进行平方操作 return result# 使用多进程来并行化处理
num_processes = cpu_count() # 获取CPU核心数作为并发数量 with Pool(num_processes) as pool: results = list(pool.map(process_row, [tuple(row) for row in df.itertuples(index=False)]))print("Results:", results)
```在这个例子中,我们首先定义了一个处理一行数据的函数`process_row()`。然后,我们使用`multiprocessing`模块中的`Pool`类来创建一个进程池,这个池子里有多少个进程取决于你的CPU核心数。我们将DataFrame中的每一行转换为元组,然后将这些元组列表传递给`pool.map()`方法,它会并行地调用`process_row()`函数处理每一个元组,最后将所有结果收集到列表中。
注意,这里我们使用了`itertuples(index=False)`来获取DataFrame的行(每一行作为一个元组),而不是使用`iterrows()`直接返回的索引和Series对象。这是因为在多线程环境下,直接操作`row.A`和`row['A']`可能会导致死锁,因为它们内部可能使用了不同的锁。
如果你的目标是提高数据处理的效率,考虑使用更高级的数据处理库,如Dask,它可以更好地利用多核处理器进行并行计算。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月02日 20时20分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!