23 octubre, 2021

EXTRAER SUBCADENAS DE UNA CADENA DE TEXTO CON LA FUNCIÓN FIND Y SPLIT CON PYTHON

Hola todos!.

Espero que estéis bien!. Hoy de nuevo un post sobre python y cómo podemos extraer una subcadena de una cadena de texto.

Mostraré dos funciones que nos pueden ayudar a realizar el trabajo, y teniendo en cuenta que nos vamos a basar en delimitadores y también en número de caracteres a extraer.

Para empezar os presentaré el ejercicio y luego iré desarrollando. Se trata de teniendo esta columna con el nombre completo de estas personas:

Extraer en las siguientes columnas el primer apellido, el segundo apellido y el nombre respectivamente:

Para empezar podemos utilizar la función Find para encontrar los delimitadores que nos permitirán extraer la subcadena entre ambos. Lo importantes es quedarse con la sintaxis: Subcadena= Cadena[inicio:fin]

import pandas as pd
import xlsxwriter
#Importamos archivo excel
df = pd.read_excel(r"C:\Users\USUARIO\OneDrive\Documents-Segu\EXTRAER_SUBCADENA\EXTRAER.xlsx",sheet_name='Hoja1')
count=0
workbook = xlsxwriter.Workbook(r'C:\Users\USUARIO\OneDrive\Documents-Segu\EXTRAER_SUBCADENA\RESULTADO_EXTRAER.xlsx')
worksheet = workbook.add_worksheet('Hoja1')
MiArray=['NOMBRE COMPLETO','PRIMER APELLIDO', 'SEGUNDO APELLIDO', 'NOMBRE']
#grabamos datos en archivo excel
for index, row in df.iterrows():
#Nombre completo    
    worksheet.write(count+1, 0, row[0])
#Primer apellido
    worksheet.write(count+1, 1, row[0][0:row[0].find(' ')])
#Segundo apellido
    worksheet.write(count+1, 2, row[0][row[0].find(' ')+1 : row[0].find(',')])
#Nombre   
    worksheet.write(count+1, 3, row[0][row[0].find(',')+1:len(row[0])].strip())
    count += 1    
#grabamos encabezados    
for columna, item in enumerate(MiArray):
    worksheet.write(0, columna, item)    
workbook.close()

Como se puede observar buscamos el espacio en blanco (‘ ‘) y la coma (‘,’) y entre corchetes indicamos el rango que queremos extraer de la subcadena. Por ejemplo para el primer apellido, que va desde el inicio de la cadena 0 hasta llegar al espacio:

row[0][0:row[0].find(' ')]

Y de esa manera vamos realizando nuestro ejemplo hasta finalizar. Es obvio decir que podemos extraer subcadenas sin usar find y especificando el número de carácter desde donde se inicia y se finaliza la extracción, pero con find estamos haciendo que la extracción sea dinámica y mediante delimitadores.

La otra forma de hacerlo es utilizar la función Split, que nos permite una sintaxis más sencilla y corta:

import pandas as pd
import xlsxwriter
#Importamos archivo excel
df = pd.read_excel(r"C:\Users\USUARIO\OneDrive\Documents-Segu\EXTRAER_SUBCADENA\EXTRAER.xlsx",sheet_name='Hoja1')
count=0
workbook = xlsxwriter.Workbook(r'C:\Users\USUARIO\OneDrive\Documents-Segu\EXTRAER_SUBCADENA\RESULTADO_EXTRAER.xlsx')
worksheet = workbook.add_worksheet('Hoja1')
MiArray=['NOMBRE COMPLETO','PRIMER APELLIDO', 'SEGUNDO APELLIDO', 'NOMBRE']
#grabamos datos en archivo excel
for index, row in df.iterrows():
#Nombre completo    
    worksheet.write(count+1, 0, row[0])
#Primer apellido
    worksheet.write(count+1, 1, row[0].split(" ")[0])
#Segundo apellido
    worksheet.write(count+1, 2, row[0].split(" ")[1].strip(','))
#Nombre 
    worksheet.write(count+1, 3, row[0].split(",")[1].strip())   
    count += 1    
#grabamos encabezados    
for columna, item in enumerate(MiArray):
    worksheet.write(0, columna, item)    
workbook.close()

Cuando indicamos un [0] después de la función queremos hacer referencia a parte anterior o primer texto antes del delimitador, si indicamos un [1], un [2], etc sería para parte posterior o siguiente del texto después del delimitador o delimitadores.

Por ello, y siguiendo el ejemplo anterior para extraer el primer apellido debemos indicar que queremos todo antes del espacio en blanco:

row[0].split(" ")[0]

En los casos en los que sepamos que estamos realizando la extracción de espacios en blanco adicionales, para poder eliminarlos debemos utilizar la función .strip() al final. Por ejemplo para extraer el nombre:

row[0].split(",")[1].strip()

Y esto es todo, espero que os sean de utilidad estas dos funciones a la hora de realizar extracciones de datos en una cadena de texto.

Os dejo el archivo del ejemplo : )

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies