Объединение двух больших фреймов данных в заданном столбце c с показом индикатора выполнения - PullRequest
1 голос
/ 21 февраля 2020

У меня есть два больших набора данных, один 2,6 ГБ и другой 1 ГБ. Мне удалось прочитать их как DataFrames.

Далее я хочу создать новый DataFrame, в котором я хочу сопоставить оба набора данных по уникальному идентификатору из обоих и отбросить строки, у которых нет идентификаторов, совпадающих между двумя наборами данных.

Я пробовал объединить с небольшим количеством строк, и я думаю, что это работает, но я хочу объединить все это, а также хочу показать индикатор выполнения. Я использую Jupyter Notebook с Python 3.

Matrikkel2019 - это уникальный идентификатор в обоих одинаковых наборах данных, и я хочу сохранить столбцы из обоих наборов данных, но сохранить только значения с одним и тем же matrikkel2019 ID

Код

from tqdm import tqdm_notebook

tqdm_notebook().pandas() 

merge = energydata.merge(dwellingData, left_on = "matrikkel2019", right_on="matrikkel2019").progress_apply()

Я пытался использовать lambda x: x**2 внутри функции progress_apply, но получаю ошибку: TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int' and Invalid arguments error

Основная проблема заключается в том, что операция слияния занимает слишком много времени, и мой P C с 8 ГБ ОЗУ испытывает трудности, так что я не знаю, сколько времени это займет или будет ли оно закончено sh.

1 Ответ

0 голосов
/ 21 февраля 2020

tqdm поддерживает индикаторы выполнения для операций слияния pandas.

код взят из этого вопроса, здесь

import pandas as pd
from tqdm import tqdm

df1 = pd.DataFrame({'lkey': 1000*['a', 'b', 'c', 'd'],'lvalue': np.random.randint(0,int(1e8),4000)})
df2 = pd.DataFrame({'rkey': 1000*['a', 'b', 'c', 'd'],'rvalue': np.random.randint(0, int(1e8),4000)})

#this is how you activate the pandas features in tqdm
tqdm.pandas()
#call the progress_apply feature with a dummy lambda 
df1.merge(df2, left_on='lkey', right_on='rkey').progress_apply(lambda x: x)

Для вашего кода, вместе с с импортом, это должно быть просто:

tqdm.pandas()
merge = energydata.merge(dwellingData, left_on = "matrikkel2019", right_on="matrikkel2019").progress_apply(lambda x: x)
...