Dividir y reemplazar cadenas
Divida cadenas en varias columnas con .str.split(expand=True) y reemplace subcadenas con .str.replace().
Dividir y reemplazar cadenas es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
Dividir cadenas en una lista
.str.split(sep) divide cada cadena de una Serie en cada aparición del separador y devuelve una Serie de listas. Sin expand=True, cada elemento es una lista de Python, lo que resulta útil para contar tokens o realizar más operaciones a nivel de lista. El separador puede ser una cadena literal o un patrón regex.
import pandas as pd
df = pd.DataFrame({'tags': ['python,data,pandas', 'ml,ai', 'sql,db,query']})
# Split into a list of strings
df['tag_list'] = df['tags'].str.split(',')
print(df['tag_list'])
# 0 [python, data, pandas]
# 1 [ml, ai]
# 2 [sql, db, query]
# Count tags per row
df['tag_count'] = df['tag_list'].str.len()
print(df['tag_count'].tolist()) # [3, 2, 3]expand=True para dividir en columnas
Pasar expand=True a .str.split() devuelve un DataFrame en lugar de una Serie de listas, donde cada token resultante de la división se convierte en su propia columna (columnas 0, 1, 2, …). Esta es la forma estándar de ampliar una columna delimitada; por ejemplo, dividir un nombre completo 'first last' en columnas independientes para el nombre y el apellido.
import pandas as pd
df = pd.DataFrame({'full_name': ['Alice Smith', 'Bob Jones', 'Carol White']})
# Split into two columns
name_parts = df['full_name'].str.split(' ', expand=True)
name_parts.columns = ['first_name', 'last_name']
df = pd.concat([df, name_parts], axis=1)
print(df)
# full_name first_name last_name
# 0 Alice Smith Alice Smith
# 1 Bob Jones Bob Jones
# 2 Carol White Carol WhiteLimitar el número de divisiones con n=
El parámetro n limita el número máximo de divisiones. .str.split(sep, n=1) divide como máximo una vez y crea como máximo dos partes. Esto resulta útil cuando solo necesita el primer componente de una cadena y el resto puede permanecer unido; por ejemplo, para extraer el dominio de un correo electrónico dividiendo en '@'.
import pandas as pd
df = pd.DataFrame({'email': ['alice@example.com', 'bob@work.org', 'carol@test.net']})
# Split at '@', keep only the first split
parts = df['email'].str.split('@', n=1, expand=True)
df['username'] = parts[0]
df['domain'] = parts[1]
print(df[['username', 'domain']])
# username domain
# 0 alice example.com
# 1 bob work.org
# 2 carol test.netrsplit() para dividir desde la derecha
.str.rsplit(sep, n=1) divide desde el lado derecho de la cadena. Resulta útil cuando desea obtener el último componente; por ejemplo, para extraer la extensión de un archivo de una ruta dividiendo en el último punto. Combinado con expand=True, crea dos columnas: todo lo anterior al último separador y todo lo posterior.
import pandas as pd
df = pd.DataFrame({'filepath': ['data/raw/sales.csv', 'data/clean/orders.xlsx', 'reports/q1.pdf']})
# Split on the last '/' to separate directory from filename
parts = df['filepath'].str.rsplit('/', n=1, expand=True)
df['directory'] = parts[0]
df['filename'] = parts[1]
print(df[['directory', 'filename']])
# directory filename
# 0 data/raw sales.csv
# 1 data/clean orders.xlsx
# 2 reports q1.pdf.str.replace() para sustituir subcadenas
.str.replace(pat, repl) reemplaza las apariciones de un patrón en cada cadena. De forma predeterminada, pat se interpreta como una expresión regular, por lo que debe pasar regex=False para reemplazar cadenas literales. El reemplazo puede ser una cadena fija o una referencia inversa de regex. Utilice siempre este método para realizar sustituciones vectorizadas en lugar de un bucle de Python.
import pandas as pd
df = pd.DataFrame({'price': ['$1,200.50', '$800.00', '$3,450.75']})
# Remove dollar sign and commas
df['price_clean'] = (
df['price']
.str.replace('$', '', regex=False) # literal $
.str.replace(',', '', regex=False) # literal comma
)
df['price_float'] = df['price_clean'].astype(float)
print(df)
# price price_clean price_float
# 0 $1,200.50 1200.50 1200.5
# 1 $800.00 800.00 800.0
# 2 $3,450.75 3450.75 3450.75Reemplazar con patrones regex
Cuando pasa regex=True (el valor predeterminado), el patrón es una expresión regular y el reemplazo puede incluir referencias inversas como r'\1' para hacer referencia a grupos capturados. Esto permite realizar transformaciones de texto avanzadas, como reformatear fechas, normalizar números de teléfono o extraer datos estructurados de texto libre.
import pandas as pd
df = pd.DataFrame({'date': ['01-15-2024', '03-20-2024', '07-04-2024']})
# Reformat from MM-DD-YYYY to YYYY-MM-DD using groups
df['date_iso'] = df['date'].str.replace(
r'(\d{2})-(\d{2})-(\d{4})',
r'\3-\1-\2',
regex=True
)
print(df)
# date date_iso
# 0 01-15-2024 2024-01-15
# 1 03-20-2024 2024-03-20
# 2 07-04-2024 2024-07-04Contar los reemplazos realizados
A veces querrá verificar cuántos valores se modificaron realmente mediante un reemplazo. Compare la Serie original con la reemplazada para contar las filas en las que se produjo un cambio. Este paso de validación confirma que el patrón de reemplazo coincidió como esperaba y ayuda a detectar errores de regex de forma temprana.
import pandas as pd
df = pd.DataFrame({'text': ['foo bar', 'hello foo', 'world', 'foo foo']})
original = df['text'].copy()
df['text'] = df['text'].str.replace('foo', 'baz', regex=False)
changed = (df['text'] != original).sum()
print(f'{changed} rows were modified') # 3
print(df['text'].tolist())
# ['baz bar', 'hello baz', 'world', 'baz baz']Reemplazar varios patrones con un bucle
Cuando necesite aplicar muchas sustituciones (por ejemplo, estandarizar decenas de abreviaturas), recorra un diccionario de correspondencias y aplique cada reemplazo en secuencia. Esto resulta más fácil de mantener que una única alternancia regex compleja. Cree la correspondencia a partir de reglas de negocio o una tabla de consulta.
import pandas as pd
df = pd.DataFrame({'dept': ['Eng', 'Engg', 'HR', 'Human Resources', 'Mktg', 'Marketing']})
# Standardisation map
substitutions = {
'Engg': 'Engineering',
'Eng': 'Engineering',
'Human Resources': 'HR',
'Mktg': 'Marketing'
}
for old, new in substitutions.items():
df['dept'] = df['dept'].str.replace(old, new, regex=False)
print(df['dept'].tolist())
# ['Engineering', 'Engineering', 'HR', 'HR', 'Marketing', 'Marketing']Volver a unir las partes divididas
Después de dividir una cadena, es posible que necesite volver a combinar las partes. Para una Serie de listas, utilice .str.join(separator) para concatenar los elementos de la lista en una sola cadena por fila. Para unir valores de varias columnas, utilice la concatenación de cadenas estándar con + y .astype(str).
import pandas as pd
df = pd.DataFrame({'parts': [['alpha', 'beta'], ['foo', 'bar', 'baz']]})
# Join list elements with a hyphen
df['joined'] = df['parts'].str.join('-')
print(df['joined'])
# 0 alpha-beta
# 1 foo-bar-bazNormalizar los espacios en blanco
Una tarea habitual de limpieza de texto consiste en reducir varios espacios consecutivos a un solo espacio. Esto suele ocurrir en texto extraído de páginas web, donde el espaciado del HTML o copiar y pegar añade espacios en blanco adicionales. El patrón regex r'\s+' coincide con uno o más caracteres de espacio en blanco y los reemplaza por un solo espacio; después, .str.strip() elimina cualquier espacio inicial o final.
import pandas as pd
df = pd.DataFrame({'address': ['123 Main St', ' 456 Oak Ave ', '789 Pine St']})
df['address_clean'] = (
df['address']
.str.replace(r'\s+', ' ', regex=True)
.str.strip()
)
print(df['address_clean'].tolist())
# ['123 Main St', '456 Oak Ave', '789 Pine St']Práctica: analizar una columna de cadenas estructuradas
Aquí tiene un ejemplo realista en el que una sola columna contiene datos estructurados como 'Alice:25:Engineer'. Dividimos la cadena usando el delimitador, asignamos nombres a las columnas resultantes y convertimos cada una a su tipo adecuado: un proceso completo de análisis y conversión de tipos utilizando únicamente .str.split() y astype().
import pandas as pd
df = pd.DataFrame({'record': ['Alice:25:Engineer', 'Bob:34:Manager', 'Carol:28:Analyst']})
parts = df['record'].str.split(':', expand=True)
parts.columns = ['name', 'age', 'role']
parts['age'] = parts['age'].astype(int)
result = pd.concat([df, parts], axis=1)
print(result)
# record name age role
# 0 Alice:25:Engineer Alice 25 Engineer
# 1 Bob:34:Manager Bob 34 Manager
# 2 Carol:28:Analyst Carol 28 AnalystComprobación rápida
Compruebe su comprensión de la división y el reemplazo de cadenas.
Resumen de la lección
En esta lección ha aprendido que str.split(sep, expand=True) amplía una columna delimitada a varias columnas, n= limita el número de divisiones, str.rsplit() divide desde la derecha y str.replace() sustituye patrones (con compatibilidad con regex). Encadene operaciones de división y reemplazo con strip y lower para crear procesos completos de normalización de texto. A continuación, utilizará patrones regex para extraer y buscar subcadenas.
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Dividir y reemplazar cadenas» es gratis?
Sí — el texto completo de «Dividir y reemplazar cadenas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Dividir y reemplazar cadenas»?
Divida cadenas en varias columnas con .str.split(expand=True) y reemplace subcadenas con .str.replace(). Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Dividir y reemplazar cadenas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El accessor .str
- Dividir y reemplazar cadenas
- Coincidencia de patrones con regex
- Combinar y limpiar columnas de texto