import pandas as pd import dask.dataframe as dd import time
import warnings
warnings.simplefilter('ignore')
data['x'] = range(1000)
data['y'] = range(1000)
def add(s):
s['sum'] = s['x']+s['y']
return s
start = time.time()
n_data = data.apply(add, axis=1)
print('it cost time is {} sec'.format(time.time()-start))
start = time.time()
d_data = dd.from_pandas(data, npartitions=10)
s_data = d_data.apply(add, axis=1)
print('it cost time is {} sec'.format(time.time()-start))
start = time.time()
s_data = s_data.compute()
print('but transform it cost time is {} sec'.format(time.time()-start))
结果是:
它花费的时间是 1.0297248363494873 秒
它花费的时间是 0.008629083633422852 秒
但转换它的成本时间是 1.3664238452911377 秒
熊猫申请很慢。因为您使用 Python 函数逐行操作,所以它必须使用 Python for 循环而不是 C for 循环。
Dask 数据帧的默认调度程序使用线程,这通常非常适合快速向量化 Pandas 操作,但对受 Python 代码约束的慢速 Pandas 操作无济于事。您可以考虑尝试多处理或分布式调度程序。请参阅http://docs.dask.org/en/latest/scheduling.html
但是,我鼓励您在尝试 Dask 之前更好地使用 Pandas。使用快速 Pandas API 可能比 Dask 更快地加速您的计算。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句