Athrun Data Intelligence


5 consejos para utilizar expresiones regulares en la limpieza de datos5 consejos para utilizar expresiones regulares en la limpieza de datos
Imagen del autor | Creada en Canva

Si eres usuario de Linux o Mac, probablemente hayas utilizado grep En la línea de comandos, se pueden buscar archivos mediante la búsqueda de patrones. Las expresiones regulares (regex) permiten buscar, buscar y manipular textos en función de patrones, lo que las convierte en herramientas potentes para el procesamiento de textos y la limpieza de datos.

Para operaciones de coincidencia de expresiones regulares en Python, puede utilizar la función incorporada re móduloEn este tutorial, veremos cómo se pueden usar expresiones regulares para limpiar datos. Veremos cómo eliminar caracteres no deseados, extraer patrones específicos, buscar y reemplazar texto, y más.

1. Eliminar caracteres no deseados

Antes de continuar, importemos el módulo re incorporado:

Los campos de cadena (casi) siempre requieren una limpieza exhaustiva antes de poder analizarlos. Los caracteres no deseados (que suelen deberse a formatos variables) pueden dificultar el análisis de los datos. Las expresiones regulares pueden ayudarle a eliminarlos de manera eficiente.

Puedes utilizar el sub() Función del módulo re para reemplazar o eliminar todas las apariciones de un patrón o carácter especial. Supongamos que tiene cadenas con números de teléfono que incluyen guiones y paréntesis. Puede eliminarlos como se muestra a continuación:

textual content = "Contact information: (123)-456-7890 and 987-654-3210."
cleaned_text = re.sub(r'(()-)', '', textual content)
print(cleaned_text) 

Aquí, re.sub(patrón, reemplazo, cadena) reemplaza todas las ocurrencias del patrón en la cadena con el reemplazo. Usamos el (r'(()-)’ patrón para que coincida con cualquier ocurrencia de (, ), o – dándonos el resultado:

Output >>> Contact information: 1234567890 or 9876543210

2. Extraer patrones específicos

Extraer direcciones de correo electrónico, URL o números de teléfono de campos de texto es una tarea común, ya que se trata de información relevante. Y para extraer todos los patrones específicos de interés, puede utilizar el findall() función.

Puedes extraer direcciones de correo electrónico de un texto de la siguiente manera:

textual content = "Please attain out to us at [email protected] or [email protected]."
emails = re.findall(r'b(w.-)+?@w+?.w+?b', textual content)
print(emails)

El re.findall(patrón, cadena) La función busca y devuelve (como una lista) todas las apariciones del patrón en la cadena. Usamos el patrón r'(-)+?@+?.+?b’ Para que coincida con todas las direcciones de correo electrónico:

Output >>> ('[email protected]', 'gross [email protected]')

3. Reemplazar patrones

Ya lo hemos utilizado sub() Función para eliminar caracteres especiales no deseados. Pero puede reemplazar un patrón por otro para que el campo sea adecuado para un análisis más consistente.

A continuación se muestra un ejemplo de eliminación de espacios no deseados:

textual content = "Utilizing     common     expressions."
cleaned_text = re.sub(r's+', ' ', textual content)
print(cleaned_text) 

El r’s+’ El patrón coincide con uno o más caracteres de espacio en blanco. La cadena de reemplazo es un solo espacio que nos da el resultado:

Output >>> Utilizing common expressions.

4. Validar formatos de datos

La validación de formatos de datos garantiza la coherencia y exactitud de los datos. Regex puede validar formatos como correos electrónicos, números de teléfono y fechas.

Aquí te explicamos cómo puedes utilizar el match() Función para validar direcciones de correo electrónico:

e mail = "take a look [email protected]"
if re.match(r'^b(w.-)+?@w+?.w+?b$', e mail):
    print("Legitimate e mail")  
else:
    print("Invalid e mail")

En este ejemplo, la cadena de correo electrónico es válida:

5. Dividir cadenas por patrones

A veces, es posible que desees dividir una cadena en varias cadenas en función de patrones o de la aparición de separadores específicos. Puedes usar el cut up() función para hacer eso.

Vamos a dividir el textual content cadena en oraciones:

textual content = "That is sentence one. And that is sentence two! Is that this sentence three?"
sentences = re.cut up(r'(.!?)', textual content)
print(sentences) 

Aquí, re.cut up(patrón, cadena) divide la cadena en todas las apariciones del patrón. Usamos el ¿¡por qué?! Patrón para hacer coincidir puntos, signos de exclamación o signos de interrogación:

Output >>> ('That is sentence one', ' And that is sentence two', ' Is that this sentence three', '')

Cómo limpiar los marcos de datos de Pandas con expresiones regulares

La combinación de expresiones regulares con pandas le permite limpiar marcos de datos de manera eficiente.

Para eliminar caracteres no alfabéticos de los nombres y validar direcciones de correo electrónico en un marco de datos:

import pandas as pd

information = {
	'names': ('Alice123', 'Bob!@#', 'Charlie$$$'),
	'emails': ('[email protected]', 'bob_at_example.com', '[email protected]')
}
df = pd.DataFrame(information)

# Take away non-alphabetic characters from names
df('names') = df('names').str.substitute(r'(^a-zA-Z)', '', regex=True)

# Validate e mail addresses
df('valid_email') = df('emails').apply(lambda x: bool(re.match(r'^b(w.-)+?@w+?.w+?b$', x)))

print(df)

En el fragmento de código anterior:

  • df('names').str.substitute(sample, alternative, regex=True) reemplaza las ocurrencias del patrón en la serie.
  • lambda x: bool(re.match(sample, x)):Esta función lambda aplica la coincidencia de expresiones regulares y convierte el resultado en un valor booleano.

El resultado es el que se muestra:

 	  names           	   emails    valid_email
0	  Alice	        [email protected]     	    True
1  	  Bob          bob_at_example.com    	    False
2         Charlie     [email protected]     	    True

Terminando

Espero que este tutorial te haya resultado útil. Repasemos lo que hemos aprendido:

  • Usar re.sub para eliminar caracteres innecesarios, como guiones y paréntesis en números de teléfono y similares.
  • Usar re.findall para extraer patrones específicos del texto.
  • Usar re.sub para reemplazar patrones, como convertir múltiples espacios en un solo espacio.
  • Validar formatos de datos con re.match para garantizar que los datos se adhieran a formatos específicos, como validar direcciones de correo electrónico.
  • Para dividir cadenas según patrones, aplique re.cut up.

En la práctica, combinará expresiones regulares con pandas para limpiar de manera eficiente los campos de texto en los marcos de datos. También es una buena práctica comentar las expresiones regulares para explicar su propósito, lo que mejora la legibilidad y la facilidad de mantenimiento. Para obtener más información sobre la limpieza de datos con pandas, lea 7 pasos para dominar la limpieza de datos con Python y Pandas.

Bala Priya C es una desarrolladora y escritora técnica de la India. Le gusta trabajar en la intersección de las matemáticas, la programación, la ciencia de datos y la creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, la ciencia de datos y el procesamiento del lenguaje pure. ¡Le gusta leer, escribir, programar y tomar café! Actualmente, está trabajando en aprender y compartir su conocimiento con la comunidad de desarrolladores mediante la creación de tutoriales, guías prácticas, artículos de opinión y más. Bala también crea interesantes descripciones generales de recursos y tutoriales de codificación.



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *