Pandas & NumPy Academy · Lección

Dividir y reemplazar cadenas

Divida cadenas en varias columnas con .str.split(expand=True) y reemplace subcadenas con .str.replace().

Lección 2 de 413 pasos

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     White

Limitar 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.net

rsplit() 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.75

Reemplazar 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-04

Contar 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-baz

Normalizar 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   Analyst

Comprobació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.

Gratis para empezar

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

  1. El accessor .str
  2. Dividir y reemplazar cadenas
  3. Coincidencia de patrones con regex
  4. Combinar y limpiar columnas de texto
← Volver a Pandas & NumPy Academy