Cómo abrir archivos csv o de texto grandes

Vistas de publicaciones: 3,861

El problema

Si trabaja con Excel, en algún momento, probablemente haya intentado abrir archivos csv o de texto grandes pero quizás no los haya abierto. Mi colega recibió una vez un archivo CSV grande de 8 GB. Quería echar un vistazo al contenido,pero no podía abrirlo usando ningún programa que probara, Bloc de notas, Excel, etc. El archivo era simplemente demasiado grande para que el programa siquiera comenzara.

Así que me pidió ayuda. Su petición era relativamente simple: abra el archivo CSV de 8 GB de gran tamaño y, potencialmente, observe los datos de las primeras dos mil líneas. Esta tarea aparentemente imposible es fácil cuando eliges la herramienta correcta: Python.

Nuestro enfoque

Primero exploraremos formas de examinar el contenido del CSV grande. A continuación, desglosaremos el archivo grande en archivos pequeños, para que los datos sean viables (¿se pueden abrir?) en Excel.

Para fines de demostración, no usaremos un archivo csv grande de 8 GB; en su lugar, usaremos un archivo más pequeño con solo 2600 filas de datos. Si quieres seguir, no dudes en descargar el ejemplo desde aquí.

La Solución

Como siempre, comenzamos importando las bibliotecas necesarias, en este ejercicio, solo necesitamos pandas.

import pandas as pd 
df = pd.read_csv('large_data.csv')
df_small = pd.read_csv('large_data.csv', nrows = 1000)

pd.read_csv() nos permite leer cualquier .archivo csv en Python, independientemente del tamaño del archivo – más sobre este punto más adelante. Un archivo csv es un archivo de valores separado por comas, que es básicamente un archivo de texto. Este método pandas tiene un argumento opcional nrows, que especifica el número de filas que desea cargar.

La primera variable df cargó todo dentro del archivo csv. Mientras que la segunda variable df_small cargaba solo las primeras 1000 filas de datos. Podemos comprobarlo llamando al atributo .shape.

tamaño (#de filas, # de columnas) de los dos dataframes

Como se muestra arriba, el «large_data.el archivo csv » contiene 2618 filas y 11 columnas de datos en total. Y también podemos confirmar que en la variable df_small, solo cargamos las primeras 1000 filas de datos, también 11 columnas.

Escribir df_small.head() muestra las primeras 5 filas de datos dentro del marco de datos df_small. ¡Podemos echar un vistazo al archivo grande de esta manera!

A continuación, ¿qué pasa si queremos poder abrir el archivo de datos utilizando solo Excel? Ya sabes, a la gente le gusta Excel, ¡así que tenemos que apegarnos a él!

Aunque no podemos usar magic para permitir que Excel abra este archivo de 8 GB, podemos «dividir y conquistar» dividiéndolo en archivos más pequeños. Por ejemplo, 8 archivos de 1 GB cada uno, o 16 archivos de 500 MB cada uno. Una versión moderna de Excel puede manejar esos tamaños de archivo fácilmente.

Esta vez, cargaremos el dataframe de forma ligeramente diferente, con un argumento opcional chunksize. Una vez más, para fines de demostración, estamos utilizando un archivo mucho más pequeño.

df = pd.read_csv('large_data.csv', chunksize = 900)

Sin entrar en demasiados detalles técnicos, el argumento chunksize nos permite cargar datos en trozos, cada trozo tiene un tamaño de 900 filas de datos en nuestro ejemplo. El número de trozos es determinado automáticamente por el programa. Dado que nuestro archivo csv contiene 2,618 filas, esperamos ver 2618 / 900 = 2.9, lo que significa 3 trozos en total. Los dos primeros trozos contienen 900 filas, y el último trozo contiene las 818 filas restantes.

Veamos si es cierto.

tamaños de marco de datos más pequeños

Hemos cargado y dividido con éxito un archivo en piezas más pequeñas, a continuación, guardémoslas en archivos individuales más pequeños.

i = 1for file in df: file.to_csv(f'file_{i}.csv') i += 1
descomponiendo el archivo original y guardándolo en archivos pequeños

Uniéndolo todo

import pandas as pd df = pd.read_csv('large_data.csv', chunksize = 900)df_small = pd.read_csv('large_data.csv', nrows = 1000)i = 1for file in df: print(file.shape) file.to_csv(f'file_{i}.csv') i += 1

Utilizamos solo 8 líneas de código para resolver lo que parece imposible de lograr en Excel. Espero que estés empezando a amar Python ❤️🐍!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.