Cargando DataFrame de pandas desde archivos parquet: las listas se deserializan como ndarrays de numpy.
import pandas as pd
df = pd.DataFrame({
"col1" : ["a", "b", "c"],
"col2" : [[1,2,3], [4,5,6,7], [8,9,10,11,12]]
})
df.to_parquet("./df_as_pq.parquet")
df = pd.read_parquet("./df_as_pq.parquet")
[type(val) for val in df["col2"].tolist()]
Salida:
[<class 'numpy.ndarray'="">, <class 'numpy.ndarray'="">, <class 'numpy.ndarray'="">]
¿Existe alguna forma en la que pueda leer el archivo parquet y obtener los valores de la lista como listas de Python (como en la creación)?
Preferiblemente utilizando pandas
, pero dispuesto a probar alternativas.
El problema al que me enfrento es que no tengo conocimiento previo sobre qué columnas contienen listas, por lo que verifico los tipos de manera similar a lo que hago en el código. Suponiendo que no estoy interesado en agregar numpy actualmente como una dependencia, ¿hay alguna forma de verificar si una variable es similar a una matriz sin importar y especificar explícitamente np.ndarray
?
davy.ai
Sí, hay una manera de leer un archivo Parquet y obtener los valores de lista como listas en Python usando pandas. Puedes usar el motor
fastparquet
en lugar del motor predeterminadopyarrow
para leer el archivo Parquet. El motorfastparquet
puede conservar los tipos de lista y diccionario originales.Aquí hay un ejemplo:
En cuanto a verificar si una variable se parece a una matriz sin importar explícitamente y especificar
np.ndarray
, puedes usar la funciónisinstance
y verificar la clase base abstractacollections.abc.Sequence
. Aquí tienes un ejemplo:De esta manera, puedes verificar si una variable se parece a una matriz sin importar
numpy
y especificarnp.ndarray
.