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

682
Vistas
redondeo de pandas al convertir flotante a entero

Tengo un DataFrame de pandas con un índice flotante (en decimal) que uso para buscar valores (similar a un diccionario). Como los flotantes no son exactamente el valor, se supone que deben multiplicarse todo por 10 y convertirlo en enteros .astype(int) antes de establecerlo como índice. Sin embargo, esto parece hacer un floor en lugar de redondear. Por lo tanto, 1.999999999999999992 se convierte en 1 en lugar de 2. El redondeo anterior con el método pandas.DataFrame.round() no evita este problema, ya que los valores aún se almacenan como flotantes.

La idea original (que obviamente plantea un error clave) era esta:

 idx = np.arange(1,3,0.001) s = pd.Series(range(2000)) s.index=idx print(s[2.022])

tratando de convertir a enteros:

 idx_int = idx*1000 idx_int = idx_int.astype(int) s.index = idx_int for i in range(1000,3000): print(s[i])

la salida siempre es un poco aleatoria ya que el valor 'real' de un número entero puede estar ligeramente por encima o por debajo del valor deseado. En este caso el índice contiene dos veces el valor 1000 y no contiene el valor 2999.

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

0

Tienes razón, astype(int) hace una conversión hacia cero:

'entero' o 'con signo': tipo de int con signo más pequeño

de la documentación pandas.to_numeric (que está vinculada desde astype() para conversiones numéricas).

Si desea redondear, debe hacer una ronda flotante y luego convertir a int:

 df.round(0).astype(int)

Utilice otras funciones de redondeo, según sus necesidades.

over 4 years ago · Santiago Trujillo Denunciar

0

Si entiendo bien, ¿podría simplemente realizar la operación de redondeo seguida de convertirlo en un número entero?

 s1 = pd.Series([1.2,2.9]) s1 = s1.round().astype(int)

Lo que da la salida:

 0 1 1 3 dtype: int32
over 4 years ago · Santiago Trujillo Denunciar

0

En caso de que el marco de datos contenga valores numéricos y no numéricos y solo desee tocar campos numéricos:

 df = df.applymap(lambda x: int(round(x, 0)) if isinstance(x, (int, float)) else x)
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