在非可迭代函数上执行进度条 - Python

4

关于这个问题有一些疑问,但似乎找不到一个在非可迭代函数上执行进度条的方法。下面是一个合并两个不同数据框的函数。我希望将此函数插入到另一个显示进度的函数中。

from multiprocessing import Pool
import tqdm
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randint(0,100,size=(100000, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,100,size=(100000, 4)), columns=list('AXYZ'))

def merge_df(df1, df2):

    df = pd.merge(left = df1, right = df2, how = 'left',
    left_on = 'A', right_on = 'A')
    return df

if __name__ == '__main__':
   with Pool(2) as p:
      r = list(tqdm.tqdm(p.imap(merge_df, df1, df2)))

数值错误:DataFrame的真实值是模糊的。请使用a.empty、a.bool()、a.item()、a.any()或a.all()。
2个回答

9
from tqdm import tqdm
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randint(0,100,size=(100000, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,100,size=(100000, 4)), columns=list('AXYZ'))

#this is how you activate the pandas features in tqdm
tqdm.pandas()

#call the progress_apply feature with a dummy lambda 
df1.merge(df2).progress_apply(lambda x: x)

要使以上代码正常工作,您必须拥有tqdm的版本4.33.0。请使用以下命令卸载旧版本并安装新版本:

pip uninstall tqdm
pip install tqdm=='4.33.0'

0

可能的一种解决方案是使用以下方法将merge_df数据框中的一个进行拆分:

dfs = np.split(df1, 100)   #or df2, depends of your merging left/right

然后在 merge_df 中使用并适应进度条(例如 @Greenstick 建议的 https://dev59.com/QnA75IYBdhLWcg3wqK__#34325723)来解决您的问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接