Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

170
Vistas
Lea numpy en el marco de datos de pandas y vuelva al archivo

Tengo un archivo binario que está empaquetado y construido como repetido:

 struct Record { uint32_t a; double b; } __attribute__ ((packed));

Estoy leyendo este archivo binario con python así:

 def read_file(filename): dt = np.dtype([('a', np.uint32), ('b', np.float64)]) data = np.fromfile(filename, dtype=dt) df = pd.DataFrame(data=data, columns=dt.names) return df

Luego, estoy manipulando los datos en el marco de datos y luego me gustaría guardarlos en un archivo en el mismo formato.

Estoy intentando esto:

 df.to_numpy(dtype=dt).tofile('/tmp/out2.bin')

Pero si el archivo es lo que esperaba, porque parece que to_numpy(dtype=dt) con una matriz no modificada no da como resultado la matriz original. Aquí hay un ejemplo completo reproducible:

 import numpy as np import pandas as pd import io dt = np.dtype([ ('a', np.uint32), ('b', np.float64) ]) data = np.frombuffer(b'\1\2\3\4\x00\x00\x00\x00\x00\x00E@', dtype=dt) print(data) df = pd.DataFrame(data=data, columns=dt.names) print(df) from_df = df.to_numpy(dtype=dt) print(from_df)

La primera impresión imprime una matriz de un elemento de estructura:

 [(67305985, 42.)]

y el segundo un marco de datos

 ab 0 67305985 42.0

Ahora esperaría que la to_numpy(dtype=dt) en el marco de datos no modificado haga una matriz que sea igual a la primera, pero en su lugar obtengo algo que se imprime

 [[(67305985, 6.7305985e+07) ( 42, 4.2000000e+01)]]

¿Cómo convertir el marco de datos de Pandas de nuevo a la matriz de estructuras unidimensional original?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No conozco ninguna buena manera de hacer que los pandas hagan un tipo de estructura.

 dt = np.dtype([('a', np.uint32), ('b', np.float64)]) df = read_file(...)

Vas a tener que crear una matriz vacía y llenarla tú mismo.

 d = np.empty(df.shape[1], dtype=dt) d['a'], d['b'] = df['a'], df['b'] d.tofile('/tmp/out2.bin')
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda