在非iterable函数上执行进度条-Python
关于这一点有一些问题,但我似乎找不到一个在不可迭代函数上执行进度条的。下面是一个合并两个独立数据帧的函数。我希望将这个函数插入到一个单独的显示进度的函数中在非iterable函数上执行进度条-Python,python,pandas,progress-bar,Python,Pandas,Progress Bar,关于这一点有一些问题,但我似乎找不到一个在不可迭代函数上执行进度条的。下面是一个合并两个独立数据帧的函数。我希望将这个函数插入到一个单独的显示进度的函数中 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
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)))
ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()
一种可能的解决方案是在
merge_df
中拆分一个数据帧:
dfs = np.split(df1, 100) #or df2, depends of your merging left/right
然后使用(内部merge_df
)并调整进度条(如@Greenstick…)以适应您的问题
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)
要使上述代码正常工作,您必须拥有4.33.0
版本的tqdm
。使用以下命令卸载旧版本并安装新版本:
pip uninstall tqdm
pip install tqdm=='4.33.0'