Reemplace los valores ​​en el marco de datos de Pandas con expresiones regulares

| | | | | | | | | | | | | | | | | | | | |

Ya discutimos en el artículo anterior, cómo reemplazar algunos valores de cadena conocidos ‚Äã‚Äãen un marco de datos. En esta publicación, usaremos expresiones regulares para reemplazar cadenas que tienen algún patrón.

Problema # 1: Se le presenta un marco de datos que contiene información detallada sobre varios eventos en diferentes ciudades Para aquellas ciudades que comiencen con la palabra clave "Nueva" o "Nueva", cámbiela a "Nueva".

Solución: vamos a utilizar una expresión regular para detectar tales nombres, y luego usaremos Dataframe.replace () para reemplazar esos nombres.


# import pandas como pd

importar pandas como pd


# Vamos a crear el marco de datos

df = pd.DataFrame ({ `Ciudad` : [ `Nueva York` , ` Parague` , `Nueva Delhi` , `Venecia` < código clase ="simple ">, ` nueva Orleans ` ],

` Evento` : [ `Música` , `Poesía` , ` Teatro` , `Comedia` , ` Tech_Summit` ],

`Coste` : [ 10000 , 5000 < /código> , 15000 , 2000 , 12000 ]})


# Vamos a crear un índice

index_ = [pd.Period ( `02-2018` ), pd.Period ( ` 04-2018` ),

pd.Período ( `06-2018` ), pd.Period ( ` 10-2018` ), pd.Period ( `12-2018` )]


# Establecer índice

df.index = index_


# Imprime el marco de datos

imprime (df)

Salida:

Ahora escribiremos una expresión regular para que coincida con la cadena, y luego usaremos Dataframe.replace () para reemplazar esos nombres.


# reemplazar las líneas correspondientes

df_actualizado = df.replace (to_replace = `[nN] nuevo` , valor = `Nuevo_` , expresión regular = Verdadero )


# Imprime el marco de datos actualizado

imprimir (df_updated)

Salida:

Como podemos ver en la salida, las líneas antiguas se han reemplazado con éxito por otras nuevas.

Problema n.º 2: se le proporciona un marco de datos que contiene información detallada sobre varios eventos en diferentes ciudades. Ciertos nombres de ciudades contienen algunos detalles adicionales entre paréntesis. Busque dichos nombres y elimine detalles adicionales.

Solución: Para esta tarea, escribiremos nuestra propia función personalizada utilizando expresiones regulares para definir y actualizar los nombres de estas ciudades. Además, usaremos Dataframe.apply() para aplicar nuestra función personalizada a cada valor de columna.


# importar pandas como pd

import pandas como pd


# Vamos a crear el marco de datos

df = pd.DataFrame ({ `City` : [ ` Nueva York (Ciudad) ` , ` Parague` , `Nueva Delhi (Delhi)` , `Venecia` , ` nueva Orleans` ],

` Evento` : [ ` Music` , `Poesía` , `Teatro` , `Comedia` , ` Tech_Summit` ],

`Coste` : [ 10000 , 5000 , 15000 , 2000 , 12000 ]})



# Vamos No creemos un índice

index_ = [pd .Period ( `02-2018` ), pd.Period ( `04-2018` ),

pd.Período ( `06-2018` ), pd.Period ( ` 10-2018` ), pd.Period ( `12-2018` )]


# Establecer índice

df.index = index_


# Imprimir el marco de datos

imprimir (df)

Salida:

Ahora escribiremos nuestra propia función personalizada para que coincida con la descripción en los nombres de las ciudades.


# Importar re-lote para usar expresiones regulares

import re


# Función para limpiar nombres

def Clean_names (City_name):

# Buscar paréntesis abiertos en el título seguido de

# cualquier carácter se repite cualquier número de veces

if re.search ( ` (. * ` , City_name):


# Recuperar la posición del inicio del patrón

pos = re.search (< /código> `(. * ` , nombre_ciudad) .start ()

# devuelve el nombre borrado

return City_name [: pos]


else :

# si se requiere limpieza, devolver el mismo nombre

return City_name


# Columnas de ciudad actualizadas

df [ `Ciudad` ] = df [ `Ciudad ` ]. aplicar (Clean_names)


# Imprime el marco de datos actualizado

print (df)

Salida: