Панды: Слияние массив слишком большой, большой, как объединить по частям?
При попытке объединить два кадра данных с помощью панд я получаю сообщение: «ValueError: массив слишком большой». Я предполагаю, что объединенная таблица будет иметь около 5 миллиардов строк, что, вероятно, слишком много для моего компьютера с 8 ГБ оперативной памяти (это ограничено только моей оперативной памятью или она встроена в систему pandas?).
Я знаю, что когда у меня будет объединенная таблица, я вычислю новый столбец, а затем отфильтрую строки в поисках максимальных значений в группах. Поэтому итоговая выходная таблица будет всего 2,5 миллиона строк.
Как я могу разбить эту проблему так, чтобы я мог выполнить этот метод слияния на меньших частях и построить таблицу вывода, не затрагивая мои ограничения ОЗУ?
Приведенный ниже метод работает правильно для этих небольших данных, но не подходит для больших реальных данных:
import pandas as pd
import numpy as np
# Create input tables
t1 = {'scenario':[0,0,1,1],
'letter':['a','b']*2,
'number1':[10,50,20,30]}
t2 = {'letter':['a','a','b','b'],
'number2':[2,5,4,7]}
table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)
# Merge the two, create the new column. This causes "...array is too big."
table3 = pd.merge(table1,table2,on='letter')
table3['calc'] = table3['number1']*table3['number2']
# Filter, bringing back the rows where 'calc' is maximum per scenario+letter
table3 = table3.loc[table3.groupby(['scenario','letter'])['calc'].idxmax()]
Это продолжение двух предыдущих вопросов:
Есть ли у iterrows проблемы с производительностью?
Каков хороший способ избежать использования iterrows в этом примере?
Я отвечаю на свой вопрос ниже.