¿Cómo leo un archivo csv grande con pandas?

Resuelto Rajkumar Kumawat asked hace 9 años • 0 respuestas

Estoy intentando leer un archivo csv grande (aproximadamente 6 GB) en pandas y aparece un error de memoria:

MemoryError                               Traceback (most recent call last)
<ipython-input-58-67a72687871b> in <module>()
----> 1 data=pd.read_csv('aphro.csv',sep=';')

...

MemoryError: 

¿Alguna ayuda con esto?

Rajkumar Kumawat avatar Sep 22 '14 00:09 Rajkumar Kumawat
Aceptado

El error muestra que la máquina no tiene suficiente memoria para leer el CSV completo en un DataFrame a la vez. Suponiendo que no necesita todo el conjunto de datos en la memoria al mismo tiempo, una forma de evitar el problema sería procesar el CSV en fragmentos (especificando el chunksizeparámetro):

chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
    # chunk is a DataFrame. To "process" the rows in the chunk:
    for index, row in chunk.iterrows():
        print(row)

El chunksizeparámetro especifica el número de filas por fragmento. (El último fragmento puede contener menos de chunksizefilas, por supuesto).


pandas >= 1.2

read_csvwith chunksizedevuelve un administrador de contexto, que se usará así:

chunksize = 10 ** 6
with pd.read_csv(filename, chunksize=chunksize) as reader:
    for chunk in reader:
        process(chunk)

Ver GH38225

unutbu avatar Sep 21 '2014 17:09 unutbu

La fragmentación no siempre debería ser la primera opción para este problema.

  1. ¿El archivo es grande debido a datos no numéricos repetidos o columnas no deseadas?

    Si es así, a veces puede ver ahorros masivos de memoria leyendo columnas como categorías y seleccionando las columnas requeridas mediante el parámetro pd.read_csv usecols .

  2. ¿Su flujo de trabajo requiere cortar, manipular o exportar?

    Si es así, puede utilizar dask.dataframe para dividir, realizar cálculos y exportar de forma iterativa. La fragmentación la realiza dask de forma silenciosa, que también admite un subconjunto de API de pandas.

  3. Si todo lo demás falla, lea línea por línea mediante fragmentos.

    Chunk a través de pandas o mediante la biblioteca csv como último recurso.

jpp avatar Jan 23 '2018 17:01 jpp