Pandas .loc y regex para títulos faltantes

Clase 28 de 38Curso de Ingeniería de Datos con Python

Contenido del curso

Web scraping

Pandas

Resumen

Completar títulos faltantes en un conjunto de noticias puede ser directo si las URLs contienen suficiente información. Aquí aprenderás a reconstruir el campo title a partir de la URL con Pandas, regex y asignación con .loc, tal como se implementa en la función fill_missing_titles. Además, verás consideraciones prácticas para cuando conviene transformar o eliminar registros.

¿Cómo completar títulos faltantes con Pandas, regex y .loc?

Para solucionar títulos nulos, se crea una función llamada fill_missing_titles que recibe un DataFrame. La lógica principal es simple: detectar valores faltantes en la columna title, extraer un candidato de la columna url con regex y el namespace .str, transformarlo con .applymap y .lambda (usando split y join), y asignarlo de vuelta con .loc.

  • Registro de operación con logger.info: comunica el inicio del proceso de llenado.
  • Máscara booleana con isna: identifica las filas sin título.
  • Extracción con regex: usa un grupo nombrado (por ejemplo, "Missing Titles") para aislar el segmento de interés hasta el final del string.
  • Transformación con .applymap: divide por diagonales con split y junta con espacios con join para formar el título.
  • Asignación con .loc: escribe los títulos generados en las filas donde faltan.
  • Retorno del DataFrame: devuelve los datos ya enriquecidos con títulos.

¿Cómo luce el código en Python?

import logging import pandas as pd logger = logging.getLogger(__name__) # fill_missing_titles: llena títulos faltantes a partir de la columna 'url'. def fill_missing_titles(df: pd.DataFrame) -> pd.DataFrame: logger.info("filling missing titles") # 1) máscara booleana de títulos faltantes. missing_titles_mask = df["title"].isna() # 2) extracción con regex (grupo nombrado p.ej. 'Missing Titles') y transformación. # - split por "/" y join con espacios para formar el título. missing_titles = ( df.loc[missing_titles_mask, "url"] .str.extract(r"(?P<Missing Titles>.+)$") # grupo nombrado hasta el final del string .applymap(lambda title: title.split("/")) .applymap(lambda title_word_list: " ".join(title_word_list)) ) # 3) asignación con .loc del título generado. df.loc[missing_titles_mask, "title"] = missing_titles["Missing Titles"] return df

¿Qué hace la función fill_missing_titles en cada paso?

La implementación es lineal y fácil de seguir. El objetivo es llenar los missing titles de forma reproducible y limpia.

  • logger.info: señala el inicio del proceso de "filling missing titles". Aporta trazabilidad.
  • missing_titles_mask: una mask booleana con df["title"].isna(). Detecta nulos.
  • str.extract con grupo nombrado: usa el namespace .str para aplicar la regex y crear una columna "Missing Titles".
  • applymap + lambda: primero split por las diagonales para obtener una lista; después join con espacios para formar un título legible.
  • .loc para asignar: df.loc[missing_titles_mask, "title"] toma como fuente la columna "Missing Titles" surgida de la extracción.
  • return df: entrega el DataFrame actualizado.

Palabras clave y conceptos aplicados:

  • Máscara booleana: selección de filas con valores nulos en title.
  • Expresión regular con grupo nombrado: facilita seleccionar y referenciar el resultado por nombre.
  • Transformaciones vectorizadas con .str: operaciones eficientes sobre series de texto.
  • Funciones anónimas con lambda: transformaciones breves y encadenadas.
  • Asignación segura con .loc: evita SettingWithCopy y hace explícito el objetivo.

¿Cómo ejecutar el script con Newspaper Recipe?

  • Abre el archivo principal llamado "Newspaper Recipe".
  • Corre el script con Python pasando el nombre del dataset como argumento.
  • Ejemplo práctico mencionado: usar el conjunto del "Universal" y verificar que "funcionó" tras presionar Enter.

¿Cuándo transformar o eliminar registros faltantes sin afectar conclusiones?

No siempre podrás reconstruir el dato con una transformación. En algunos casos, la mejor decisión es eliminar el registro con valores faltantes. Esto es válido siempre que no afecte el tamaño muestral al punto de debilitar tus conclusiones estadísticas.

  • Si la URL contiene suficiente estructura, conviene transformar para recuperar el título.
  • Si no hay señales útiles, elimina el registro sin miedo.
  • Vigila el impacto: no borres tantos registros que pierdas poder estadístico.

¿Tienes dudas o quieres compartir tus resultados y conclusiones estadísticas? Comenta y cuéntanos cómo resolviste tus títulos faltantes y qué patrones encontraste en tus datos.

      Pandas .loc y regex para títulos faltantes