es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pandas: ¿cómo convertir objetos en valores de punto flotante?

Estoy trabajando con un dataframe de pandas de jugadores de fútbol. Hay una columna con el valor de cada jugador. El problema es que el tipo de esta columna es un objeto y quiero convertirlo a float64. ¿Cómo puedo hacerlo? La variable es Release clause.

df_fifa['Release Clause']
0        €226.5M
1        €127.1M
2        €228.1M
3        €138.6M
4        €196.4M
          ...<br>
18202    €143K
18203    €113K
18204    €165K
18205    €143K
18206    €165K
Name: Release Clause, Length: 18207, dtype: object

Quiero convertirlo al número completo. Por ejemplo, de €200M a 200.000.000 y de €200k a 200.000.

Sé que la función debería ser

df_fifa['Release Clause'].astype(str).astype(int)

Pero primero debo eliminar €, M y k. Intenté eliminarlos de esta forma pero no funcionó:

df_fifa['Release Clause'] = df_fifa['Release Clause'].replace("€","")

¿Alguien sabe cómo hacerlo?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir la columna Release Clause de object a float64 y eliminar el símbolo de euro , podemos usar el método str.replace() en combinación con str.strip() para eliminar cualquier espacio en blanco al principio o al final:

    df_fifa['Release Clause'] = df_fifa['Release Clause'].str.replace('€', '') \
                                                       .str.strip() \
                                                       .str.replace('M', '000000') \
                                                       .str.replace('K', '000')
    df_fifa['Release Clause'] = df_fifa['Release Clause'].astype(float)
    

    La primera línea de código elimina el símbolo de euro de la columna y cualquier espacio en blanco al principio o al final. La segunda línea reemplaza los sufijos M y K por 000000 y 000, respectivamente, para convertir los valores en enteros. Finalmente, la columna se convierte al tipo de datos float64 utilizando astype().

    Como resultado, la columna Release Clause estará representada por valores float en notación científica de forma predeterminada. Si desea dar formato a los números de una manera específica, puede utilizar el método apply() con una función de formato personalizada:

    def format_number(x):
        if x >= 1000000:
            return '€{:.2f}M'.format(x / 1000000)
        elif x >= 1000:
            return '€{:.2f}K'.format(x / 1000)
        else:
            return '€{:.0f}'.format(x)
    
    df_fifa['Release Clause'] = df_fifa['Release Clause'].apply(format_number)
    

    Esta función convierte los números de nuevo a su formato original dividiéndolos por 1000000 para millones y 1000 para miles, y luego aplicando un formato de cadena específico utilizando format().

Comments are closed.