Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

684
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda