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.

Cómo extraer un número flotante de una cadena en un marco de datos.

En mi marco de datos, cada entrada es una cadena que consta de al menos un número. A veces hay entradas múltiples e idénticas en una celda.

data = {'INTERVAL': ['0,60', '0,8 0,8', '0,5 0,5 0,5']}     
df = pd.DataFrame(data)       
print(df)

¿Cómo puedo extraer el valor como un número flotante y reemplazar la columna original con la nueva representación simplificada? He intentado usar el comando “extract” de la siguiente manera, pero ha fallado.

df['INTERVAL'].str.extract('((\d+))')

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer los valores numéricos como números de punto flotante de una columna de cadenas en un dataframe de pandas, puedes usar la función str.extractall(). Aquí tienes un ejemplo de código que debería funcionar para tu caso específico:

    import pandas as pd
    
    data = {'INTERVALO': ['0,60', '0,8 0,8', '0,5 0,5 0,5']}
    df = pd.DataFrame(data)
    
    patrón = r'(\d+),(\d+)'
    
    df['INTERVALO'] = df['INTERVALO'].str.extractall(patrón).astype(float).unstack().droplevel(0, axis=1)
    

    Explicación:
    – La variable patrón es una expresión regular que busca uno o más caracteres numéricos seguidos de una coma y luego otro uno o más caracteres numéricos. Captura los dos grupos de dígitos por separado para facilitar la conversión a números de punto flotante.
    – La función str.extractall() devuelve un dataframe con los grupos extraídos (una fila por coincidencia), que luego convertimos a flotantes y reorganizamos en un formato más amplio usando unstack().
    – Por último, eliminamos el nivel superior de la columna de índice múltiple con droplevel().

    Después de ejecutar este código, df se debería haber actualizado de la siguiente manera:

       INTERVALO
    0      0.60
    1  0.80 0.80
    2  0.50 0.50 0.50
    

    Ten en cuenta que este código asume que todas las cadenas en la columna INTERVALO tienen al menos un valor numérico. Si ese no es el caso, es posible que tengas que ajustar el patrón de la expresión regular en consecuencia.

Comments are closed.