Объединить два больших файла по столбцу в Python - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть 2 файла с 38374732 строками в каждом и размером 3,3 Гб каждый. Я пытаюсь присоединиться к ним в первой колонке. Для этого я решил использовать панд со следующим кодом, извлеченным из Stackoverflow:

 import pandas as pd
 import sys
 a = pd.read_csv(sys.argv[1],sep='\t',encoding="utf-8-sig")
 b = pd.read_csv(sys.argv[2],sep='\t',encoding="utf-8-sig")
 chunksize = 10 ** 6
 for chunk in a(chunksize=chunksize):
   merged = chunk.merge(b, on='Bin_ID')
   merged.to_csv("output.csv", index=False,sep='\t')

Однако я получаю ошибку памяти (не удивительно). Я посмотрел на код с чанками для панд (что-то вроде этого Как прочитать csv-файл размером 6 ГБ с пандами ), однако как мне реализовать его для двух файлов в цикле, и я не думаю, что Я могу портировать второй файл, так как мне нужно искать столбец во всем втором файле. Есть ли выход для этого?

1 Ответ

0 голосов
/ 30 апреля 2018

Это уже обсуждалось в других сообщениях, таких как упомянутое вами ( это , или это , или это ).

Как объясняется там, я бы попытался использовать dask dataframe для загрузки данных и выполнения слияния, но в зависимости от вашего компьютера вы все равно не сможете это сделать.

Минимальный рабочий пример:

import dask.dataframe as dd

# Read the CSVs
df1 = dd.read_csv('data1.csv')
df2 = dd.read_csv('data2.csv')

# Merge them
df = dd.merge(df1, df2, on='Bin_ID').compute()

# Save the merged dataframe
df.to_csv('merged.csv', index=False)
...