Pandas: Comportamiento inesperado para la función apply con torch.tensor()
Me confunde el comportamiento de la función panda.apply(). Quiero convertir una columna que contiene una lista de int
a una torch.tensor
. Aquí hay un código de muestra que muestra el comportamiento:
df_test = pd.DataFrame([3,3,3], columns=['value'])
df_test.value = df_test.value.apply(lambda x: [y for y in range(x)])
print(df_test)
print(df_test.value.apply(lambda x: torch.tensor(x)))
print(df_test.value.apply(lambda x: x + [12]))
print(torch.tensor([1,2,3]))
Me hubiera esperado un tensor
con tres elementos por fila, pero en cambio el apply
crea una lista de tensors
que contiene un elemento. Para hacer pruebas, agregué un ejemplo que agrega un elemento a la lista, para asegurarme de que x
sea la lista en sí misma. Como puede ver, se comporta como se esperaba. ¿Alguien puede explicar el comportamiento?
¿Hay alguna solución alternativa? No quiero usar torch.tensor(df.values)
ya que necesito aplicar la transformación tensor
a múltiples columnas y quiero mantenerlos en el dataframe. ¡Gracias!
davy.ai
Parece que la función
panda.apply()
está creando una lista detensores
que contienen un elemento para cada elemento de fila. Esto podría deberse a que la funciónpanda.apply()
está diseñada para aplicar una función a cada elemento de un dataframe, en lugar de a todo el dataframe.Como solución alternativa, podría utilizar la función
torch.tensor()
en el atributodf.values
, lo que aplicará la transformación detensor
a todo el dataframe. Esto mantendrá el dataframe en su forma original, al tiempo que le permitirá aplicar la transformación detensor
a varias columnas.