<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

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

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

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")

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>