Dividir un archivo con muchas filas de Excel a múltiples archivos de Excel con Python

Excel con múltiples filas a pequeños archivos

<Hola>, al estar manejando grandes cantidades de datos me he encontrado con la dificultad de manejar archivos excel con más de 100,000 mil registros, una de las razones es por la limitantes de mi laptop pero de igual forma habrá limitantes en el servidor, he encontrado esta posible solución, consiste en poder dividir el excel en pequeños archivos para su procesamiento

Lo intente con PHP pero al momento de realizar la división de los archivos, estos no pueden ser leídos fácilmente, por eso opte por Python, ya que tiene librerías más robustas al manejar grandes cantidades de datos.

En un post anterior vimos la instalación de un contenedor con Jupyter Notebook y ahora vamos a necesitar crear un nuevo archivo.

Damos click en el símbolo +(más) que está en la parte superior izquierda

Crear nuevo notebook
Crear nuevo notebook

Veremos un panel como el siguiente, seleccionamos el notebook que está marcado con el cuadro rojo

Crear archivo en python
Crear archivo en python

Con este contenedor tuve que instalar la siguiente librería que me faltaba para el uso del excel.

Librería complementaria para el contenedor
Librería complementaria para el contenedor
import sys
!{sys.executable} -m pip install openpyxlv

El código de python para dividir el excel es el siguiente

import pandas as pd
import os

df = pd.read_excel("ejemplo.xlsx")

rows_per_file = 40

n_chunks = len(df) // rows_per_file

for i in range(n_chunks):
    start = i*rows_per_file
    stop = (i+1) * rows_per_file
    sub_df = df.iloc[start:stop]
    sub_df.to_excel(f"output/test-{i}.xlsx", sheet_name="a")
    print("start row")
    print(start)
    print("stop row")
    print(stop)
if stop < len(df):
    sub_df = df.iloc[stop:]
    sub_df.to_excel(f"output/test-{i}.xlsx", sheet_name="a")
    print("stopped")
Archivo final para el manejo de archivo grandes en Excel
Archivo final para el manejo de archivo grandes en Excel

Aquí vemos los archivos de salida.

Es muy simple, aún estoy aprendiendo este lenguaje, espero poder describir el código, en la siguiente línea de código indicamos el archivo que vamos a dividir en pequeños archivos de Excel

df = pd.read_excel("ejemplo.xlsx")

En la siguiente línea indicamos cuántas filas queremos por cada archivo

rows_per_file = 40

Ahora se declara un ciclo para ir creando los archivos con las filas declaradas en la línea previa

for i in range(n_chunks):

En esta línea de código se hacen las limitaciones, el inicio y el final de cada archivo.

start = i * rows_per_file
stop = ( i + 1 ) * rows_per_file

Creamos la limitación de los datos

sub_df = df.iloc[start:stop]

Creamos el archivo con los datos limitados

sub_df.to_excel(f"output/test-{i}.xlsx", sheet_name="a")

Tenemos un “if” en dado caso que el stop sea menor a lo existente en df

if stop < len(df):

Si se cumple la condición, obtenemos los datos que existe en df

sub_df = df.iloc[stop:]

Y por último creamos el Excel con las limitaciones previas

sub_df.to_excel(f"output/test-{i}.xlsx", sheet_name="a")

Espero que a ustedes les ayude mucho con esta pequeña explicación.

</Saludos>

Deja un comentario