У меня огромный набор данных из 292 миллионов строк (6 ГБ) в формате CSV.Функция Panda read_csv
не работает для такого большого файла.Поэтому я читаю данные небольшими порциями (10 миллионов строк) итеративно, используя этот код:
for chunk in pd.read_csv('hugeData.csv', chunksize=10**7):
#something ...
В # что-то я группирую строки по некоторым столбцам.Таким образом, в каждой итерации я получаю новые объекты groupBy.Я не могу объединить эти объекты groupBy.
Вот меньший фиктивный пример:
Здесь dummy.csv
- это файл CSV с 28 строками, который используется для торговли.отчет между некоторыми странами в каком-то году. sitc - это некоторый код продукта, а export - это объем экспорта в миллиардах долларов США.(Обратите внимание, что данные вымышленные)
year,origin,dest,sitc,export
2000,ind,chn,2146,2
2000,ind,chn,4132,7
2001,ind,chn,2146,3
2001,ind,chn,4132,10
2002,ind,chn,2227,7
2002,ind,chn,4132,7
2000,ind,aus,7777,19
2001,ind,aus,2146,30
2001,ind,aus,4132,12
2002,ind,aus,4133,30
2000,aus,ind,4132,6
2001,aus,ind,2146,8
2001,chn,aus,1777,9
2001,chn,aus,1977,31
2001,chn,aus,1754,12
2002,chn,aus,8987,7
2001,chn,aus,4879,3
2002,aus,chn,3489,7
2002,chn,aus,2092,30
2002,chn,aus,4133,13
2002,aus,ind,0193,6
2002,aus,ind,0289,8
2003,chn,aus,0839,9
2003,chn,aus,9867,31
2003,aus,chn,3442,3
2004,aus,chn,3344,17
2005,aus,chn,3489,11
2001,aus,ind,0893,17
Я разделил их на две 14-строчные данные и сгруппировал их по году, происхождению, месту назначения.
for chunk in pd.read_csv('dummy.csv', chunksize=14):
xd = chunk.groupby(['origin','dest','year'])['export'].sum();
print(xd)
Результаты:
origin dest year
aus ind 2000 6
2001 8
chn aus 2001 40
ind aus 2000 19
2001 42
2002 30
chn 2000 9
2001 13
2002 14
Name: export, dtype: int64
origin dest year
aus chn 2002 7
2003 3
2004 17
2005 11
ind 2001 17
2002 14
chn aus 2001 15
2002 50
2003 40
Name: export, dtype: int64
Как я могу объединить два объекта GroupBy?
Будет ли объединение их снова создавать проблемы с памятью в больших данных?Прогнозирование, исходя из характера данных, при правильном объединении количество строк, безусловно, сократится как минимум в 10-15 раз.
Основная цель:
Учитывая страну происхождения и страну назначения, мне нужно построить общий объем экспорта между ними в год.Запрашивать это каждый раз по всем данным занимает много времени.
xd = chunk.loc[(chunk.origin == country1) & (chunk.dest == country2)]
Поэтому я подумал сэкономить время, разложив их по группам.
Любое предложение очень ценится.