MemoryError cuando fusiono dos marcos de datos Pandas

Busqué en casi todo el Internet y de alguna manera ninguno de los enfoques parece funcionar en mi caso.

Tengo dos archivos csv grandes (cada uno con más de un millón de filas y un tamaño aproximado de 300-400MB). Se están cargando bien en marcos de datos utilizando la función read_csv sin tener que usar el parámetro chunksize . Incluso realicé ciertas operaciones menores en estos datos como la generación de nuevas columnas, el filtrado, etc.

Sin embargo, cuando bash fusionar estos dos marcos, obtengo un error de memoria . Incluso he intentado usar SQLite para lograr la fusión, pero en vano. La operación lleva para siempre.

El mío es una PC con Windows 7 con 8GB de RAM. La versión de Python es 2.7

Gracias.

Edición: Intenté métodos de fragmentación también. Cuando hago esto, no obtengo MemoryError, pero el uso de RAM explota y mi sistema falla.

Cuando esté fusionando datos usando pandas.merge, usará la memoria df1, la memoria df2 y la memoria merge_df. Creo que es por eso que se produce un error de memoria. Debería exportar df2 a un archivo csv y usar la opción chunksize y combinar datos.

Puede ser una mejor manera pero puedes intentar esto. * para conjuntos de datos grandes, puede usar la opción chunksize en pandas.read_csv

df1 = pd.read_csv("yourdata.csv") df2 = pd.read_csv("yourdata2.csv") df2_key = df2.Colname2 # creating a empty bucket to save result df_result = pd.DataFrame(columns=(df1.columns.append(df2.columns)).unique()) df_result.to_csv("df3.csv",index_label=False) # save data which only appear in df1 # sorry I was doing left join here. no need to run below two line. # df_result = df1[df1.Colname1.isin(df2.Colname2)!=True] # df_result.to_csv("df3.csv",index_label=False, mode="a") # deleting df2 to save memory del(df2) def preprocess(x): df2=pd.merge(df1,x, left_on = "Colname1", right_on = "Colname2") df2.to_csv("df3.csv",mode="a",header=False,index=False) reader = pd.read_csv("yourdata2.csv", chunksize=1000) # chunksize depends with you colsize [preprocess(r) for r in reader] 

esto guardará los datos combinados como df3.