Выполнить индикатор выполнения на не повторяемой функции - Python - PullRequest
0 голосов
/ 30 октября 2019

Есть несколько вопросов по этому поводу, но я не могу найти тот, который выполняет индикатор выполнения для не повторяемой функции. Ниже приведена функция, которая объединяет два отдельных фрейма данных. Я надеюсь вставить эту функцию в отдельный, который отображает прогресс.

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: Истинное значение DataFrame неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019
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'
0 голосов
/ 31 октября 2019

Одно из возможных решений - разделить один из ваших фреймов данных на merge_df с помощью:

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

, а затем использовать (внутри merge_df) и адаптировать индикатор выполнения (например, * 1007). * предложенный @Greenstick ...) к вашей проблеме ...

...