Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

155
Views
Inicialización de la serie Slow Pandas de la lista de DataFrames

Descubrí que es extremadamente lento si inicializamos un objeto de la serie pandas de una lista de marcos de datos. Por ejemplo, el siguiente código:

 import pandas as pd import numpy as np # creating a large (~8GB) list of DataFrames. l = [pd.DataFrame(np.zeros((1000, 1000))) for i in range(1000)] # This line executes extremely slow and takes almost extra ~10GB memory. Why? # It is even much, much slower than the original list `l` construction. s = pd.Series(l)

Inicialmente, pensé que la inicialización de la Serie accidentalmente copió en profundidad los DataFrames, lo que lo hace lento, pero resultó que solo se copia por referencia como lo hace = habitual en python.

Por otro lado, si solo creo una serie y copio manualmente los elementos (en un bucle for), será rápido:

 # This for loop is faster. Why? s1 = pd.Series(data=None, index=range(1000), dtype=object) for i in range(1000): s1[i] = l[i]

¿Que está sucediendo aquí?

Uso en la vida real: tengo un cargador de tablas que lee algo en el disco y devuelve un marco de datos de pandas (una tabla). Para acelerar la lectura, uso una herramienta paralela (de esta respuesta ) para ejecutar varias lecturas (cada lectura es para una fecha, por ejemplo), y devuelve una lista (de tablas). Ahora quiero transformar esta lista en un objeto de la serie pandas con un índice adecuado (por ejemplo, la fecha o la ubicación del archivo utilizada en la lectura), pero la construcción de la serie lleva una cantidad de tiempo ridícula (como se muestra en el código de muestra anterior). Por supuesto, puedo escribirlo como un ciclo for para resolver el problema, pero eso será feo. Además quiero saber lo que realmente está tomando el tiempo aquí. ¿Alguna idea?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Esta no es una respuesta directa a la pregunta del OP (qué está causando la desaceleración al construir una serie a partir de una lista de marcos de datos):

Es posible que me esté perdiendo una ventaja importante de usar pd.Series para almacenar una lista de marcos de datos; sin embargo, si eso no es crítico para los procesos posteriores, entonces una mejor opción podría ser almacenar esto como un diccionario de marcos de datos o concatenar en un solo marco de datos .

Para el diccionario de marcos de datos, se podría usar algo como:

 d = {n: df for n, df in enumerate(l)} # can change the key to something more useful in downstream processes

Para la concatenación:

 w = pd.concat(l, axis=1) # note that when using with the snippet in this question # the column names will be duplicated (because they have # the same names) but if your actual list of dataframes # contains unique column names, then the concatenated # dataframe will act as a normal dataframe with unique # column names
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!