dle*_*eal 8 python pandas dask
按照这里的示例:https://www.youtube.com/watch?v = jrc3cpf3PKU我尝试将~70GB Dask数据帧与我加载为Pandas数据帧的~24MB进行合并.
合并在两列A和B上,我没有设置任何索引:
import dask.dataframe as dd
from dask.diagnostics import ProgressBar
small_df = pd.read_csv(dataframe1) # as pandas
large_df = dd.read_csv(dataframe2) #as dask.dataframe
df2 = large_df.merge(small_df, how='left', left_on=leftcolumns, right_on=rightcolumns) #do the merge
A = df2[df2['some column'] == 'somevalue'] #do a reduction that would fit on my computer
pbar = ProgressBar()
pbar.register()
result = A.compute()
Run Code Online (Sandbox Code Playgroud)
我使用的是具有16GB RAM和4个内核的Windows计算机.我使用进度条来评估合并过程的进度.我昨晚彻夜离开了.我今天早上重新启动它,到目前为止大约半小时进度和0%进度.
谢谢你,我感谢你的帮助,
更新
我在我的Mac上用8GB内存试过它,效果很好.我相信,我有Anaconda附带的Dask发行版.在任何情况下,我认为我没有做任何不同的事情.
我按照上述编码(21分钟)分享我的结果和时间:
In [26]: C = result1.compute()
[########################################] | 100% Completed | 21min 13.4s
[########################################] | 100% Completed | 21min 13.5s
[########################################] | 100% Completed | 21min 13.6s
[########################################] | 100% Completed | 21min 13.6s
Run Code Online (Sandbox Code Playgroud)
更新2
我在Windows计算机上更新了最新版本的Dask,效果很好.
小智 1
您可以迭代唯一的相等值并使用循环分配其他列:
unioun_set = list(set(small_df['common_column']) & set(large_df['common_column']))
for el in union_set:
for column in small_df.columns:
if column not in large_df.columns:
large_df.loc[large_df['common_column'] == el,column] = small_df.loc[small_df['common_column'] == el,column]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4804 次 |
| 最近记录: |