Tengo un dataframe en el que me gustaría almacenar numpy.array
‘raw’:
df['COL_ARRAY'] = df.apply(lambda r: np.array(do_something_with_r), axis=1)
pero parece que los pandas
intentan ‘desempacar’ el numpy.array.
¿Hay una solución? ¿Aparte de usar una envoltura (ver edición abajo)?
Intenté reduce=False
sin éxito.
EDITAR
Esto funciona, pero tengo que usar la clase de Data
‘ficticia’ para envolver la matriz, lo cual no es satisfactorio y no es muy elegante.
class Data: def __init__(self, v): self.v = v meas = pd.read_excel(DATA_FILE) meas['DATA'] = meas.apply( lambda r: Data(np.array(pd.read_csv(r['filename'])))), axis=1 )
Use una envoltura alrededor de la matriz numpy, es decir, pase la matriz numpy como lista
a = np.array([5, 6, 7, 8]) df = pd.DataFrame({"a": [a]})
Salida:
una 0 [5, 6, 7, 8]
O puede usar apply(np.array)
creando las tuplas, es decir, si tiene un dataframe
df = pd.DataFrame({'id': [1, 2, 3, 4], 'a': ['on', 'on', 'off', 'off'], 'b': ['on', 'off', 'on', 'off']}) df['new'] = df.apply(lambda r: tuple(r), axis=1).apply(np.array)
Salida:
ab id nuevo 0 en 1 [en, en, 1] 1 encendido apagado 2 [encendido, apagado, 2] 2 off en 3 [off, on, 3] 3 off off 4 [off, off, 4]
df['new'][0]
Salida:
array(['on', 'on', '1'], dtype='
Puede ajustar los np.array
datos del Marco de datos entre corchetes para mantener el np.array
en cada celda:
one_d_array = np.array([1,2,3]) two_d_array = one_d_array*one_d_array[:,np.newaxis] two_d_array array([[1, 2, 3], [2, 4, 6], [3, 6, 9]]) pd.DataFrame([ [one_d_array], [two_d_array] ]) 0 0 [1, 2, 3] 1 [[1, 2, 3], [2, 4, 6], [3, 6, 9]]