Pregunta Tome múltiples listas en el marco de datos


¿Cómo tomo múltiples listas y las pongo como columnas diferentes en un marco de datos de Python? Intenté seguir Leer listas en columnas de pandas DataFrame pero tuvo algunos problemas.

Intento 1:

  • Tener tres listas, y comprimirlas juntas y usar res = zip (lst1, lst2, lst3)
  • Rendimiento solo una columna

Intento 2:

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
 'lst2Tite' : [lst2],
 'lst3Tite':[lst3]
  }, columns=['lst1Tite','lst1Tite', 'lst1Tite'])

- produce una fila por 3 columnas (el camino anterior) o si transpodo es de 3 filas y 1 columna

¿Cómo obtengo una fila de 100 (longitud de cada lista independiente) por 3 columnas (tres listas) de marco de datos de pandas?


73
2018-05-29 06:37


origen


Respuestas:


Creo que ya casi está allí, intente eliminar los corchetes adicionales alrededor del lst(Tampoco necesita especificar los nombres de las columnas cuando está creando un marco de datos de un dict como este):

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
percentile_list = pd.DataFrame(
    {'lst1Title': lst1,
     'lst2Title': lst2,
     'lst3Title': lst3
    })

percentile_list
    lst1Title  lst2Title  lst3Title
0          0         0         0
1          1         1         1
2          2         2         2
3          3         3         3
4          4         4         4
5          5         5         5
6          6         6         6
...

Si necesita una solución algo más eficaz, puede usar np.column_stack más bien que zip como en su primer intento, esto tiene una aceleración de 2x en el ejemplo de aquí, sin embargo, en mi opinión tiene un costo de legibilidad bastante bajo:

import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]), 
                               columns=['lst1Title', 'lst2Title', 'lst3Title'])

147
2018-05-29 06:40



Añadiendo a Aditya Gurula respuesta aquí. No hay necesidad de usar el mapa. Puedes hacerlo simplemente por:

pd.DataFrame(list(zip(lst1, lst2, lst3)))

Esto establecerá los nombres de las columnas como 0,1,2. Para configurar sus propios nombres de columna, puede pasar el argumento de palabra clave columns al método anterior.

pd.DataFrame(list(zip(lst1, lst2, lst3)),
              columns=['lst1_title','lst2_title', 'lst3_title'])

20
2018-06-16 09:22



Solo agregando que usando el primer acercamiento se puede hacer como:

pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))

8
2018-02-19 18:44



Agregar una solución más escalable.

lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)

1
2017-07-07 08:18