Preparación de datos con pandas

Los datos reales rara vez llegan listos para analizar. Este material muestra cómo preparar un DataFrame de pandas: detectar y tratar valores faltantes y filas duplicadas, sustituir valores, aplicar correspondencias y agruparlos en intervalos, limpiar texto con métodos de cadenas y expresiones regulares, y almacenar etiquetas repetidas como datos categóricos. Después combinarás tablas con merge, join y concat, y las convertirás entre formato largo y ancho con índices jerárquicos, stack, unstack, pivot y melt. Cada método incluye un pequeño ejemplo resuelto y los errores que debes tener en cuenta, como las combinaciones que añaden filas sin avisar.

IntermedioUnidad 4 de 8 del curso Curso de Análisis de datos con Python

Lo que aprenderás

  1. Detecta valores faltantes y filas duplicadas en un DataFrame de pandas, decide si eliminarlos, rellenarlos o conservarlos, y comprueba el efecto de cada decisión en los datos.
    • Detecta valores faltantes en un DataFrame
      Reconoce cómo marca pandas los datos faltantes, cuéntalos por columna y por fila, y detecta los códigos ocultos que representan valores faltantes.
    • Elimina o rellena valores faltantes
      Elimina filas o columnas incompletas con dropna, o rellena los valores faltantes con valores fijos, estadísticos, valores vecinos o interpolación, y elige el método adecuado para los datos.
    • Detecta y elimina filas duplicadas
      Marca y elimina filas repetidas con duplicated y drop_duplicates, compara solo las columnas clave cuando sea necesario y conserva la copia adecuada de cada registro.
  2. Cambia los valores de una columna de forma controlada: sustituye códigos, aplica correspondencias mediante una tabla de consulta, convierte tipos, cambia etiquetas y transforma números en grupos, valores escalados y columnas indicadoras.
    • Sustituye valores, aplica correspondencias y convierte tipos
      Sustituye valores exactos con replace, transforma valores mediante un diccionario o una función con map, cambia los nombres de filas y columnas y convierte texto a números de forma segura.
    • Agrupa valores en intervalos, escálalos, limítalos y codifícalos
      Agrupa números en intervalos con cut y qcut, cambia la escala de las columnas, limita valores extremos con clip y crea columnas indicadoras para categorías.
  3. Estandariza y busca en columnas de texto con el accesor str y expresiones regulares, y almacena eficientemente como categóricas las columnas con un conjunto fijo de valores.
    • Limpia columnas de texto con métodos de cadenas
      Usa los métodos vectorizados str para eliminar espacios, cambiar mayúsculas y minúsculas, dividir, buscar, sustituir y combinar texto en todas las filas de una columna a la vez.
    • Busca coincidencias y extrae patrones con expresiones regulares
      Escribe expresiones regulares sencillas y úsalas con contains, extract, findall y replace para comprobar, extraer y limpiar partes estructuradas de texto.
    • Utiliza el tipo de datos category
      Convierte columnas con un conjunto limitado de valores a categóricas, trabaja con sus categorías y códigos, y usa categorías ordenadas para valores que tienen un orden natural.
  4. Reúne datos de varias tablas: relaciona filas mediante columnas clave o etiquetas de índice con merge y join, rellena valores faltantes desde una segunda fuente y apila tablas con concat.
    • Combina DataFrames mediante columnas clave
      Combina dos tablas haciendo coincidir los valores de columnas clave con merge, elige el tipo de combinación y comprueba si el resultado contiene filas sin correspondencia o multiplicadas.
    • Combina tablas por el índice y rellena valores faltantes con datos de otra tabla
      Combina por etiquetas de índice con join o left_index y right_index, y usa combine_first y la alineación por etiquetas para completar valores faltantes con datos de una segunda fuente.
    • Apila DataFrames con concat
      Une tablas por filas o columnas con pd.concat, controla el índice y las columnas resultantes e identifica el origen de cada parte.
  5. Trabaja con tablas que tienen varios niveles de índice y convierte datos entre formato largo y ancho con stack, unstack, pivot y melt.
    • Trabaja con índices jerárquicos
      Crea e interpreta un MultiIndex, selecciona datos por niveles externos e internos, cambia el orden de los niveles, ordénalos y muévelos entre el índice y las columnas.
    • Reestructura datos con stack y unstack
      Mueve etiquetas de columnas al índice con stack y niveles del índice a las columnas con unstack, y trata las combinaciones sin observaciones que revela la reestructuración.
    • Convierte entre formato largo y ancho con pivot y melt
      Reconoce los formatos largo y ancho, convierte datos largos en una tabla ancha con pivot o pivot_table y convierte una tabla ancha en datos largos con melt.

Guía de estudio de Preparación de datos con pandas

5 capítulos

1

Detecta y trata valores faltantes y duplicados

Un valor faltante, un cero y un registro repetido tienen significados distintos. Aprende a cuantificar la ausencia de datos antes de elegir qué conservar, eliminar o estimar, y a identificar duplicados mediante las columnas que definen un registro. Unas pequeñas tablas meteorológicas y de pedidos muestran cómo pandas toma estas decisiones y cómo afectan a los recuentos de filas, los tipos de datos y los estadísticos. Cada cambio tiene un resultado visible que puedes comprobar antes de continuar con un análisis.

1.1 Detecta los valores faltantes antes de calcular

Un dato faltante significa que un valor es desconocido o no está disponible. pandas almacena un marcador especial en su lugar. Detecta el marcador antes de calcular totales o decidir qué filas se pueden utilizar.

Reconoce los marcadores

El marcador depende del tipo de datos. Las columnas de tipo flotante usan NaN, las columnas de fecha y hora usan NaT, y los tipos que admiten valores faltantes, como "Int64", "boolean" y "string", usan pd.NA. pandas 3 infiere las columnas de texto como str, con NaN para el texto faltante. El valor None de Python también se reconoce como faltante. Usa import pandas as pd e import numpy as np para los ejemplos.

df.isna() produce una tabla booleana con las mismas filas y columnas que df. Un True marca un valor faltante; df.notna() marca los valores presentes. Los alias isnull() y notnull() hacen lo mismo. No compares una columna con np.nan: NaN es distinto incluso de sí mismo, por lo que s == np.nan no detecta los valores faltantes.

Cuenta las celdas y las filas afectadas

Considera estas mediciones meteorológicas:

citytemp_crain_mm
Lima18,00,0
OsloNaN4,0
Pune31,0NaN
KyivNaNNaN

Un True booleano cuenta como 1, por lo que df.isna().sum() da 0 ciudades faltantes, 2 temperaturas y 2 mediciones de lluvia. df.isna().mean() da las proporciones 0,0, 0,5 y 0,5. La proporción de cada columna usa las cuatro filas como denominador.

Para detectar las filas afectadas, usa df.isna().any(axis=1). Devuelve False, True, True, True; al sumar se obtiene 3. En cambio, df.isna().sum().sum() da 4 celdas con valores faltantes. Kyiv aporta dos celdas, pero solo una fila afectada. Usa la medida que responda a tu pregunta.

Reconoce los códigos ocultos de valores faltantes

Un instrumento puede registrar una medición no disponible como -999, "-" o "unknown". Son valores ordinarios hasta que los conviertas. Tras confirmar el significado del código, usa df.replace([-999, "unknown"], np.nan). Durante la carga de un CSV, na_values=[-999, "unknown"] añade estos códigos a los marcadores reconocidos. Los campos CSV vacíos y las cadenas habituales como "NA", "n/a" y "NULL" ya se reconocen por defecto.

Una medición de lluvia igual a cero puede significar que no llovió, por lo que sustituir todos los ceros destruiría observaciones reales. Además, una cadena vacía creada en memoria, "", y una cadena que contiene espacios no son valores faltantes para isna(). Inspecciona el texto almacenado además de los recuentos de marcadores. Para incluir categorías faltantes en una tabla de frecuencias, usa value_counts(dropna=False).

Comprueba los cálculos y los tipos de datos

Para s = pd.Series([4, np.nan, 8]), s.mean() es 6,0: usa los dos valores conocidos. s.count() es 2, mientras que len(s) es 3. Dividir s.sum() entre len(s) da 4,0 y trata incorrectamente el valor faltante como cero. La mayoría de los estadísticos omiten los valores faltantes por defecto; una columna en la que faltan todos los valores tiene suma 0, pero media NaN.

Un valor faltante también puede cambiar el almacenamiento. pd.Series([3, None, 5]) se convierte en float64 y contiene 3,0, NaN y 5,0. Al indicar dtype="Int64" se conservan los valores enteros con <NA> para el valor faltante. La I mayúscula identifica el tipo entero de pandas que admite valores faltantes.

Puntos clave

  • Usa isna() para detectar marcadores de valores faltantes en distintos tipos de datos.
  • Cuenta por separado las celdas con valores faltantes y las filas con al menos un valor faltante.
  • Convierte los códigos confirmados de valores faltantes y conserva los ceros válidos.
  • Comprueba el número de valores conocidos que se usan en un estadístico.
  • Usa "Int64" cuando los valores enteros necesiten un marcador de valor faltante.

1.2 Elige qué eliminar o rellenar

Eliminar una fila quita sus valores conocidos junto con los faltantes. Rellenar un valor faltante conserva la fila, pero introduce una estimación. Elige según el significado de la observación y las columnas que necesite el análisis.

Controla qué filas se eliminan

df.dropna() elimina todas las filas con algún valor faltante. En la tabla meteorológica, solo queda Lima. Limita la decisión con subset o exige un número mínimo de celdas con valores presentes mediante thresh.

LlamadaFilas conservadasMotivo
df.dropna(subset=["temp_c"])Lima, PuneLa temperatura está presente
df.dropna(thresh=2)Lima, Oslo, PuneAl menos dos celdas tienen valores presentes
df.dropna(how="all")Las cuatroTodas las filas tienen una ciudad

axis="columns" elimina las columnas con valores faltantes y aquí conserva solo city. En una tabla ancha, la regla predeterminada para filas puede descartar gran parte de los datos, porque basta un valor faltante en cualquier columna. Compara len(df) antes y después de la eliminación.

Asigna el resultado

Aprende la forma con reasignación: df = df.dropna(). Por defecto, los métodos de limpieza devuelven un objeto nuevo. pandas 3.1 desaconseja inplace=True para métodos como dropna, drop_duplicates y rename.

Para una columna, escribe df["temp_c"] = df["temp_c"].fillna(0). Una llamada encadenada como df["temp_c"].fillna(0, inplace=True) nunca actualiza el DataFrame original con la copia al escribir de pandas 3. La asignación hace explícito el destino.

Rellena con un valor compatible

Un diccionario por columna permite que una tabla mixta reciba valores adecuados: df.fillna({"rain_mm": 0, "city": "Unknown"}). Las columnas omitidas del diccionario conservan sus valores faltantes. Un escalar como 0 es práctico para una tabla íntegramente numérica cuyas columnas lo acepten todas. Rellenar texto con un número es incompatible; pandas 3.1 advierte de ello y una versión futura lo rechazará.

Las temperaturas conocidas son 18,0 y 31,0. Su media es 24,5, por lo que df["temp_c"].fillna(df["temp_c"].mean()) coloca 24,5 en ambos huecos. Un valor extremo puede desplazar mucho la media; la mediana es menos sensible. Antes de rellenar, conserva un indicador con df["temp_missing"] = df["temp_c"].isna() para que los valores estimados y observados sigan siendo distinguibles.

El relleno con la media reduce la dispersión aparente de la columna. Un valor fijo alejado puede aumentarla. Rellenar la precipitación con 0 afirma que no llovió, lo que es inapropiado para un sensor que estaba apagado.

Usa mediciones vecinas cuando el orden importe

ffill() lleva el último valor conocido hacia adelante; bfill() lleva el siguiente valor conocido hacia atrás. Para 12,0, NaN, NaN, NaN, 15,0, el relleno hacia adelante da cuatro valores de 12,0 seguidos de 15,0. ffill(limit=1) rellena solo el primer hueco de esa secuencia. Un valor faltante al comienzo no tiene valor anterior y sigue faltando. Usa ffill() directamente; fillna(method="ffill") se eliminó en pandas 3.

interpolate() estima entre posiciones vecinas. Para 10, NaN, NaN, 16, la interpolación lineal da 10, 12, 14, 16. Es adecuada para mediciones que cambian suavemente en un orden significativo. Propagar valores o interpolar entre ciudades no relacionadas impondría una relación que las filas no tienen.

Después de cualquier operación, vuelve a ejecutar isna().sum() y comprueba también los recuentos de filas. Una llamada correcta a un método indica que el código se ejecutó; estas comprobaciones indican qué cambió.

Puntos clave

  • Usa subset, how o thresh para expresar qué valores faltantes importan.
  • Asigna los resultados devueltos al DataFrame o a la columna que quieras modificar.
  • Elige valores de relleno adecuados tanto para el tipo de la columna como para el significado del valor faltante.
  • Conserva un indicador de valores faltantes antes de rellenar con valores estimados.
  • Usa métodos basados en valores vecinos solo cuando el orden de las filas tenga significado.
  • Comprueba los recuentos de filas y de valores faltantes después de la limpieza.

1.3 Identifica el registro antes de eliminar sus copias

Dos filas pueden parecer iguales sin describir el mismo acontecimiento. Antes de eliminar duplicados, decide qué valores identifican un registro. Un identificador de pedido puede identificar un pedido; el cliente y la fecha por sí solos pueden identificar varias compras legítimas.

Marca las copias adicionales

df.duplicated() devuelve un valor booleano por fila. Por defecto compara todas las columnas, conserva la primera aparición y marca las copias posteriores como True. Sumar el resultado cuenta las copias adicionales, no todos los miembros de los grupos repetidos.

Considera seis filas de pedidos con los identificadores 101, 102, 102, 103, 104, 104. Las dos filas de 102 son idénticas. Las dos filas de 104 tienen distintos pesos registrados, 0,5 kg y 0,8 kg. Al comparar todas las columnas hay una copia adicional: df.duplicated().sum() es 1. df.drop_duplicates() conserva cinco filas porque las dos filas distintas de 104 no son copias exactas.

Compara las columnas que definen la identidad

df.duplicated(subset=["order_id"]) compara solo los identificadores. Marca el segundo 102 y el segundo 104, lo que da dos copias adicionales. Los valores de las demás columnas ya no afectan a esta decisión. Inspecciona los pesos que discrepan antes de elegir qué registro de pedido conservar.

Valor de keepComportamiento para un grupo repetido
"first"Conserva la primera fila en el orden actual
"last"Conserva la última fila en el orden actual
FalseElimina todos los miembros de un grupo repetido

df.drop_duplicates(subset="order_id", keep="last") conserva la versión de 0,8 kg del pedido 104 en este orden. Conservar la última fila no significa por sí mismo conservar el registro más reciente. Establece primero ese orden:

latest = df.sort_values("updated").drop_duplicates(
    subset="customer_id", keep="last"
)

Ordenar por updated coloca los registros antiguos antes de los más recientes. La comprobación de duplicados compara después solo customer_id, por lo que las distintas horas de actualización no impiden reconocer dos filas como versiones del mismo cliente.

Separa los valores de las filas de las etiquetas del índice

Estos métodos comparan valores e ignoran las etiquetas del índice. Las filas idénticas con etiquetas 4 y 9 siguen contando como duplicadas. Para esta comprobación, los valores faltantes en posiciones correspondientes cuentan como iguales. Para comprobar las propias etiquetas repetidas, usa df.index.duplicated().

La comparación exacta también conserva las diferencias de mayúsculas, minúsculas y espacios en blanco. Los valores « Lisbon», «lisbon» y «LISBON » son distintos. Limpia con .str.strip().str.lower() antes de buscar duplicados cuando esas variantes representen la misma ciudad. De lo contrario, nunique() contará tres nombres para un mismo lugar.

Comprueba la unicidad donde la relación la necesite

Una tabla de consulta debe tener una fila por clave de consulta cuando cada registro deba recibir un solo conjunto de datos. lookup["customer_id"].is_unique comprueba ese requisito. Los identificadores de cliente repetidos en una tabla de pedidos son normales porque un cliente puede hacer varios pedidos.

Si una clave de consulta se repite, una combinación posterior repite cada pedido coincidente por cada fila coincidente de la tabla de consulta. Eliminar duplicados de los pedidos descartaría compras reales sin corregir la tabla de consulta. Comprueba la clave prevista en la tabla correcta, inspecciona los registros que discrepan y compara el número de filas después de la eliminación.

Puntos clave

  • Define un registro con las columnas clave correctas antes de eliminar copias.
  • duplicated().sum() cuenta las copias posteriores con la opción predeterminada keep="first".
  • Ordena por fecha y hora de actualización antes de conservar el registro más reciente.
  • Los duplicados de valores de filas y las etiquetas de índice repetidas se comprueban por separado.
  • La unicidad de las claves de consulta evita la multiplicación accidental de filas en las combinaciones.
2

Transforma valores mediante sustituciones, correspondencias y agrupaciones en intervalos

Transformar una columna cambia el significado de sus valores o la forma en que se representan. Elige entre sustituciones exactas, correspondencias, conversión numérica, intervalos, valores escalados y columnas indicadoras. Examinarás las entradas y salidas de cada método, incluido lo que ocurre con los valores sin correspondencia y los valores en los límites, para que una operación práctica no cambie categorías ni pierda mediciones útiles sin avisar.

2.1 Cambia valores y etiquetas de forma deliberada

Una sustitución modifica los valores coincidentes, una correspondencia transforma valores y un cambio de nombre modifica etiquetas. Estas tareas pueden parecer similares en el código, pero producen resultados distintos cuando un valor no aparece en un diccionario.

Sustituye valores exactos

s.replace("N/A", np.nan) cambia solo las celdas iguales a "N/A". Una lista puede indicar varios valores anteriores: s.replace(["-", "?"], np.nan). Un diccionario proporciona sustituciones distintas, como s.replace({"M": "male", "F": "female"}). Los valores sin coincidencia permanecen como estaban.

Para una tabla completa, un diccionario anidado limita la modificación a una columna: df.replace({"status": {0: "open", 1: "closed"}}). Esto evita cambiar ceros y unos no relacionados en otras partes. Asigna el resultado devuelto para conservar el cambio.

replace busca coincidencias con celdas completas. Con «Main St» y «St», s.replace("St", "Street") solo cambia «St». Para modificar partes de una cadena, usa s.str.replace("St", "Street", regex=False), que también produce «Main Street».

Transforma mediante una correspondencia

Para los códigos «PT», «JP» y «KE», compara el mismo diccionario en dos métodos:

MétodoPTJPKE
s.map({"PT": "Portugal", "JP": "Japan"})PortugalJapanNaN
s.replace({"PT": "Portugal", "JP": "Japan"})PortugalJapanKE

Un diccionario pasado a map define los resultados disponibles. Una clave ausente no tiene resultado y pasa a ser un valor faltante. Comprueba después isna().sum() para que una correspondencia incompleta quede visible.

map también acepta una función: s.map(lambda x: x * 1000) convierte valores de kilómetros a metros. Para esta operación aritmética, s * 1000 es más sencillo y rápido porque opera sobre toda la columna. DataFrame.map aplica una función celda a celda; sustituye al método eliminado applymap.

Convierte texto a números

astype solicita un tipo de datos, como "float64", "Int64" o "category". Genera un error si un valor no se puede convertir. Para el texto "12", "7.5" y "n/a", pd.to_numeric(s, errors="coerce") produce, en cambio, 12,0, 7,5 y NaN. La coerción conserva los números que se pueden interpretar, pero requiere inspeccionar los fallos.

El formato puede impedir la conversión incluso cuando el número es válido. Para «1,200» y «950», elimina primero el separador de millares:

cleaned = s.str.replace(",", "", regex=False)
numbers = pd.to_numeric(cleaned, errors="coerce")
failed = s.notna() & numbers.isna()

Aquí failed marca los valores que estaban presentes antes de la conversión pero pasaron a ser faltantes. Comparar solo los recuentos de valores faltantes da un total útil; la máscara también localiza el texto original para inspeccionarlo. Elimina las unidades conocidas del texto de mediciones de la misma manera deliberada antes de convertir.

Cambia los nombres de las etiquetas

df.rename(columns={"Qty": "quantity"}) cambia el encabezado de una columna y deja sus celdas sin cambios. df.rename(columns=str.lower) convierte todos los encabezados a minúsculas. Una secuencia como df.columns.str.strip().str.lower().str.replace(" ", "_", regex=False) convierte «Total KG » en total_kg; asígnala a df.columns.

Usa replace o map para los valores dentro de una columna. Usa rename para las etiquetas con las que seleccionas esos valores.

Puntos clave

  • replace conserva los valores sin coincidencia; map con un diccionario los convierte en valores faltantes.
  • Usa .str.replace para modificar parte de cada valor de texto.
  • Prefiere la aritmética vectorizada para cálculos sencillos de columnas.
  • Inspecciona los nuevos valores faltantes después de la coerción numérica.
  • rename cambia etiquetas y deja los valores de los datos sin modificar.

2.2 Agrupa y cambia la escala de las mediciones

Algunos análisis necesitan mediciones exactas, mientras que otros necesitan grupos o intervalos numéricos comparables. Mantén claro el significado original: la agrupación en intervalos crea categorías, el escalado cambia la escala numérica y la limitación sustituye valores extremos.

Agrupa valores en intervalos

pd.cut(ages, [18, 30, 45, 65]) usa los intervalos (18, 30], (30, 45] y (45, 65]. El paréntesis excluye el extremo izquierdo; el corchete de cierre incluye el extremo derecho. Las edades 19, 25 y 30 entran en el primer intervalo, 41 en el segundo y 64 en el tercero. La edad 18 pasa a ser un valor faltante porque está en el límite izquierdo excluido.

include_lowest=True incluye ese valor mínimo en el primer intervalo. right=False crea, en cambio, intervalos cerrados por la izquierda como [18, 30), por lo que 30 entra en el segundo intervalo. Los valores fuera de todos los intervalos siguen siendo faltantes. Comprueba los límites exactos, además de los valores habituales entre ellos.

Debe haber una etiqueta por intervalo, una menos que el número de límites. Con labels=["18-30", "31-45", "46-65"] e include_lowest=True, las seis edades anteriores dan recuentos de 4, 1 y 1. Estas etiquetas describen edades enteras; los límites de los intervalos siguen determinando la asignación.

Elige límites o tamaños de grupo
OperaciónQué controlaUso práctico
pd.cut(x, [18, 30, 45, 65])Límites fijosIntervalos con significado
pd.cut(x, 4)Cuatro intervalos de igual amplitudComparar tramos de valores
pd.qcut(x, 4)Cuatro grupos con recuentos aproximadamente igualesComparar rangos en los datos

Para 2, 4, 6, 8, 10, 12, 14, 16, qcut da dos valores por grupo de cuartil. Los grupos con igual número de valores no tienen por qué abarcar intervalos numéricos de igual amplitud.

Escala sin crear grupos

El escalado mínimo-máximo usa (x - x.min()) / (x.max() - x.min()). Para 10, 20, 40, el rango es 30: los resultados son 0, aproximadamente 0,333 y 1. Se necesitan tanto el mínimo como el máximo; dividir solo por el máximo es una operación distinta. Una columna constante tiene rango cero, por lo que esta expresión no puede darle una dispersión escalada útil.

La estandarización usa (x - x.mean()) / x.std(). Para 10, 20, 30, la media es 20 y la desviación estándar muestral predeterminada de pandas es 10. Restar 20 y dividir por 10 da las puntuaciones z -1, 0 y 1. Una puntuación z describe la distancia a la media en unidades de desviación estándar, no una etiqueta de intervalo.

Limita y codifica

pd.Series([5, 12, 250, 8]).clip(upper=100) da 5, 12, 100, 8. A diferencia de un filtro, clip conserva la fila y sustituye el número extremo. Inspecciona los valores grandes con describe() o un filtro antes de limitarlos: una medición grande real sigue siendo un dato.

pd.get_dummies(s) crea una columna indicadora booleana por categoría. Con rojo, verde, rojo, azul, cada fila es True solo en la columna de su color. Usa dtype=int para obtener ceros y unos. Los valores faltantes dan indicadores todos falsos salvo que dummy_na=True añada una columna para valores faltantes. Para la regresión por mínimos cuadrados ordinarios con intercepto, drop_first=True elimina una columna de categoría redundante; otros modelos pueden conservar todas las categorías. Con una categoría por fila, el conjunto completo de indicadores suma la constante 1 del intercepto, lo que crea una dependencia lineal.

Para celdas que contienen varias etiquetas, s.str.get_dummies(sep="|") divide un valor como «Action|Comedy» en indicadores separados. Los intervalos agrupados también se pueden pasar a get_dummies, lo que da una columna por cada intervalo.

Puntos clave

  • Comprueba los extremos de los intervalos y los valores fuera de ellos con cut.
  • cut controla los intervalos; qcut busca recuentos de grupo similares.
  • El escalado mínimo-máximo y las puntuaciones z conservan los valores numéricos en una escala distinta.
  • clip limita valores sin eliminar filas.
  • Las columnas indicadoras representan la pertenencia a categorías sin inventar un orden numérico.
  • Trata explícitamente las categorías faltantes cuando sus indicadores sean importantes.
3

Limpia texto y datos categóricos

Los valores de texto necesitan una escritura y un espaciado coherentes antes de poder funcionar como categorías o claves. Aplica métodos de cadenas a toda una columna, extrae partes estructuradas con expresiones regulares y elige un tipo de datos categórico cuando se repita un conjunto pequeño de etiquetas. Los ejemplos relacionan la limpieza de texto con las comprobaciones de duplicados y las combinaciones, y muestran en qué se diferencian los códigos almacenados y el orden de las categorías de las palabras que ves en una tabla.

3.1 Da coherencia a los valores de texto

Una persona ve la misma ciudad en « Lisbon», «lisbon» y «LISBON ». pandas ve tres cadenas distintas. Limpiar una columna de texto proporciona un conjunto coherente de valores que comparar en recuentos, comprobaciones de duplicados y combinaciones posteriores.

Aplica métodos de cadenas a una Series

"Lima ".strip() de Python actúa sobre una cadena. Para una columna, usa el accesor .str: s.str.strip() elimina los espacios exteriores de cada valor presente. s.lower() genera un AttributeError porque la propia Series no tiene un método lower. Usa s.str.lower().

pandas 3 normalmente infiere el texto como tipo de datos str, que sustituye al antiguo valor predeterminado object. El tipo str contiene texto y valores faltantes, con NaN para el texto faltante. Los métodos de cadenas funcionan con ambos tipos. Asigna texto a una columna str; convierte primero un número a texto si debe estar allí como texto.

Combina operaciones de limpieza compatibles y asigna el resultado:

df["city"] = df["city"].str.strip().str.lower()

Las tres variantes de Lisboa se convierten en «lisbon». strip() elimina los espacios en blanco exteriores, no los espacios dentro de un nombre. upper() convierte todas las letras a mayúsculas, mientras que title() escribe cada palabra con mayúscula inicial y convierte «new york» en «New York». Elige una forma coherente para las claves y los recuentos.

Divide cadenas estructuradas

Para «Silva, Ana» y «Tanaka, Yui», s.str.split(", ") devuelve listas como ["Silva", "Ana"]. Añade expand=True para producir columnas separadas. Obtén una parte de cada lista con .str[0] o .str.get(1).

Si solo el primer separador debe dividir un valor, usa n=1. Dividir «a,b,c» por comas con n=1 da «a» y «b,c». Sin límite, da tres partes. Haz coincidir el separador exactamente, incluido cualquier espacio que forme parte del formato.

Busca y filtra

s.str.contains("lis", case=False) busca texto en cualquier posición e ignora la diferencia entre mayúsculas y minúsculas. s.str.startswith("ID") comprueba el principio; s.str.endswith(".csv") comprueba el final. Los resultados booleanos pueden seleccionar filas:

mask = df["city"].str.contains("san", case=False, na=False)
selected = df[mask]

Para el tipo str de pandas 3, el texto faltante da False en estas búsquedas. Escribir na=False también deja claro el tratamiento previsto cuando se usan cadenas que admiten valores faltantes. contains interpreta por defecto un patrón de expresión regular; añade regex=False para texto literal que contenga caracteres especiales.

Sustituye partes y crea cadenas nuevas

s.str.replace("kg", "", regex=False) elimina «kg» dondequiera que aparezca. s.replace("kg", "") solo cambia las celdas que son exactamente «kg». Esta distinción importa para valores como «12 kg».

str.replace trata literalmente su texto de búsqueda por defecto. Para «3.5 kg», .str.replace(".", "", regex=False) elimina el punto y da «35 kg». Con regex=True, el punto es un patrón para casi cualquier carácter y elimina todos los caracteres en este ejemplo de una sola línea. Nunca uses ese cambio para interpretar una medición decimal.

s.str.len() cuenta caracteres; un valor faltante produce NaN y puede hacer que el resultado sea una columna de tipo flotante. s.str[:3] extrae los tres primeros caracteres. Para combinar columnas, df["first"] + " " + df["last"] une Ana y Silva como «Ana Silva»; str.cat es otro método de unión. Cada operación devuelve un resultado, así que guárdalo en la columna que quieras usar.

Puntos clave

  • Usa .str para aplicar métodos de texto a una Series.
  • Elimina espacios exteriores y estandariza mayúsculas y minúsculas antes de comparar claves de texto.
  • Controla el resultado de la división con expand y n.
  • Elige explícitamente búsquedas literales o con expresiones regulares para caracteres especiales.
  • Vuelve a asignar el texto limpio para conservar el cambio.

3.2 Extrae las partes que describe un patrón de texto

Una expresión regular, o regex, describe un patrón en el texto. Puede reconocer una cantidad incluso cuando varían el número de dígitos o los espacios. Empieza con un patrón pequeño cuyas partes puedas explicar.

Interpreta las partes del patrón
PatrónSignificado
\dUn dígito
\wUn carácter de palabra: una letra, un dígito o un guion bajo
\sUn carácter de espacio en blanco
[A-Z]Una letra mayúscula de este intervalo
+Uno o más del elemento anterior
*Cero o más del elemento anterior
?El elemento anterior es opcional
{4}Exactamente cuatro repeticiones
(…)Un grupo de captura

Escribe los patrones de Python como cadenas sin procesar, como r"\d+", para que Python conserve sus barras invertidas. Por defecto, un punto coincide con cualquier carácter excepto un salto de línea. Escápalo como r"\." para encontrar un punto real. Para una búsqueda de texto literal, regex=False evita por completo la interpretación como patrón.

Elige cuánto texto debe coincidir

contains encuentra un patrón en cualquier posición, match comienza al principio y fullmatch exige que todo el valor coincida. Para «123a», s.str.contains(r"\d+") y s.str.match(r"\d+") encuentran una coincidencia, pero s.str.fullmatch(r"\d+") no. Usa la comprobación de toda la cadena al verificar un código completo. case=False o flags=re.IGNORECASE después de import re permite buscar coincidencias sin distinguir mayúsculas y minúsculas cuando se admite esa opción.

Captura una medición

Considera «Rice 5 kg», «Flour 2kg», «Salt» y «Beans 12 kg, 3 kg». El patrón r"(\d+)\s*kg" significa uno o más dígitos capturados como grupo, seguidos de cero o más espacios y después «kg».

quantity = s.str.extract(r"(\d+)\s*kg", expand=False)
quantity = pd.to_numeric(quantity)

Las cadenas extraídas son «5», «2», un valor faltante y «12». La conversión da los valores numéricos 5,0, 2,0, NaN y 12,0. extract toma la primera coincidencia de cada fila, por lo que la segunda cantidad de la descripción de las judías no se incluye. Sin expand=False, un solo grupo devuelve un DataFrame de una columna.

Los grupos con nombre etiquetan la salida. s.str.extract(r"(?P<year>\d{4})-(?P<month>\d{2})") encuentra «2024-03» dentro de «Report 2024-03 final» y devuelve las columnas de texto year y month. El patrón reconoce la disposición de los dígitos; la conversión numérica es un paso aparte.

Encuentra todas las coincidencias o limpia mediante un patrón

findall(r"\d+") da una lista por fila, incluidas ["12", "3"] para el texto de las judías y [] para «Salt». count(r"\d+") cuenta las coincidencias. extractall da una fila por coincidencia con un nivel adicional del índice llamado match.

Con regex=True, s.str.replace(r"\s+", " ", regex=True) reduce las secuencias de espacios en blanco a un solo espacio. r"\D" significa un carácter que no es un dígito, por lo que eliminarlo convierte «+351 912-345-678» en «351912345678». Las formas mayúsculas \S y \W niegan de forma similar las clases de caracteres de espacio en blanco y de palabra.

La repetición es voraz por defecto. En "<b>x</b>", r"<.*>" abarca desde el primer símbolo de apertura hasta el último símbolo de cierre. Eliminar esa coincidencia elimina todo. El patrón no voraz r"<.*?>" coincide con cada etiqueta por separado y deja «x». Comprueba las salidas de ejemplo antes de usar un patrón en toda una columna.

Puntos clave

  • Usa cadenas sin procesar para conservar las barras invertidas de las expresiones regulares.
  • Elige contains, match o fullmatch según el alcance deseado.
  • Los grupos de captura devuelven texto; convierte por separado los números extraídos.
  • extract toma la primera coincidencia; findall y extractall conservan varias coincidencias.
  • Escapa los caracteres especiales para buscar coincidencias literales con expresiones regulares.
  • Comprueba los patrones voraces con ejemplos que tengan varias coincidencias posibles.

3.3 Almacena etiquetas repetidas como categorías

Una columna con pocos valores repetidos muchas veces puede usar el tipo de datos category. Este almacena las etiquetas distintas una sola vez y representa cada fila con un pequeño código entero. El valor visible sigue siendo la etiqueta.

Comprende las categorías y los códigos

Para las tallas M, S, L, M, M, s.astype("category") infiere las categorías L, M, S en orden alfabético. Los códigos son 1, 2, 0, 1, 1. Usa s.cat.categories para inspeccionar las etiquetas y s.cat.codes para inspeccionar los identificadores. Un código 0 significa la primera categoría almacenada; no es una cantidad medida.

Las etiquetas repetidas pueden ahorrar mucha memoria. Hasta 126 categorías, los códigos usan un byte cada uno; a partir de 127 categorías usan dos bytes. En una configuración de pandas 3.1 con PyArrow, tres nombres de países repetidos en 3 000 000 de filas usaron unos 3 MB como datos categóricos, unos 42 MB como str y unos 165 MB como object. El sistema de almacenamiento de texto afecta a estas cifras. Una columna con valores casi todos únicos no se beneficia de almacenar una lista de categorías y un código por fila.

Define un orden significativo

El orden alfabético de las tallas coloca L antes de M y M antes de S. Define explícitamente el orden real de las tallas:

size_type = pd.CategoricalDtype(["S", "M", "L"], ordered=True)
sizes = s.astype(size_type)

Ahora la ordenación sigue S, M, L, las comparaciones como sizes > "S" tienen sentido y sizes.max() es «L» cuando aparece L. Para etiquetas sin ordenar, como países, funcionan las comprobaciones de igualdad, pero las comparaciones de mayor que generan un TypeError. as_ordered() usa la secuencia de categorías existente; inspecciónala antes de declarar que esa secuencia tiene significado.

Cambia las etiquetas permitidas

No puedes asignar «XL» a una variable categórica que solo permite S, M y L. Primero asigna el resultado ampliado, sizes = sizes.cat.add_categories("XL"), y después asigna el nuevo valor.

Convertir texto a una lista fija de categorías puede convertir los valores no incluidos en valores faltantes. pandas 3.1 advierte de que esta conversión con pérdida de información se convertirá en un error. Comprueba los valores de origen con value_counts() antes de convertir, especialmente después de limpiar las variantes de escritura.

Los métodos .cat tienen distintos fines:

  • rename_categories({"S": "small"}) cambia una etiqueta y conserva sus elementos.
  • remove_categories("L") elimina una etiqueta permitida y convierte los valores L existentes en valores faltantes.
  • set_categories([...]) sustituye toda la lista de categorías.
  • reorder_categories([...], ordered=True) cambia el orden sin cambiar las etiquetas permitidas.
  • remove_unused_categories() elimina las etiquetas que no tienen elementos actualmente.

value_counts() muestra todas las categorías permitidas, incluidas las que tienen cero observaciones. Con un tipo S/M/L que contiene solo S y M, L sigue apareciendo con un recuento de 0. Esto revela un grupo vacío para el que los datos de texto ordinarios no tienen una etiqueta almacenada.

Mantén la utilidad de las categorías en pasos posteriores

cut produce intervalos categóricos y get_dummies convierte la pertenencia a categorías en columnas indicadoras. Entregar códigos de países sin ordenar a un modelo como números impondría un orden y unas distancias artificiales. Los indicadores evitan esa interpretación.

Concatenar columnas categóricas con distintas listas de categorías normalmente hace que se pierda el tipo categórico. Alinea primero sus listas de categorías o usa pd.concat(..., union_categories=True) en pandas 3.1 cuando quieras combinar las listas. Inspecciona tanto el tipo resultante como el orden de las categorías.

Puntos clave

  • Las variables categóricas almacenan una lista de etiquetas e identificadores enteros.
  • Declara explícitamente el orden de las categorías cuando la jerarquía tenga significado.
  • Añade una categoría antes de asignar una etiqueta nueva.
  • Eliminar una categoría utilizada convierte sus valores en faltantes.
  • Usa indicadores para categorías sin ordenar en modelos numéricos.
  • Alinea las listas de categorías o únelas de forma deliberada antes de concatenar.
4

Combina DataFrames

Combinar tablas puede añadir información, añadir observaciones o rellenar valores faltantes desde una fuente de respaldo. Son tareas distintas. Relaciona claves explícitas con merge, trabaja con etiquetas de índice mediante join y combine_first, y apila partes compatibles con concat. Antes de confiar en un resultado, predice qué filas deben conservarse y cuántas coincidencias debe producir cada clave; los ejemplos muestran por qué un aumento inesperado suele comenzar con una clave de consulta repetida.

4.1 Predice qué conservará una combinación

Una combinación relaciona filas mediante valores de clave y coloca su información una junto a otra. La clave debe describir lo mismo en ambas tablas, como el identificador de cliente de un pedido y el identificador de cliente de una tabla de consulta.

Indica la clave y elige el tipo de combinación

Usa orders.merge(customers, on="customer_id"). Sin on, pandas usa todos los nombres de columna compartidos por ambas tablas. Una columna compartida sin relación, como date, podría impedir entonces coincidencias válidas de clientes.

Supón que los pedidos tienen los identificadores de cliente 10, 20, 20, 30, 50. La tabla de clientes tiene una fila para cada uno de 10, 20, 30, 40.

howQué se conservaFilas resultantes
"inner"Claves coincidentes en ambos lados4
"left"Cada fila izquierda y sus coincidencias5
"right"Cada fila derecha y sus coincidencias5
"outer"Claves de cualquiera de los lados6
"cross"Cada par de filas izquierda y derecha20

La combinación interna es la predeterminada. En una combinación por la izquierda, faltan los datos del cliente 50. Una combinación por la derecha incluye al cliente 40 sin pedido, además de los dos pedidos de 20. Una combinación externa completa incluye ambas claves sin correspondencia. Una combinación cruzada no necesita clave porque empareja deliberadamente todas las filas. pandas 3 también ofrece left_anti y right_anti para las filas que no tienen una clave coincidente en el otro lado.

Comprueba cuántas coincidencias puede tener una fila

Dos filas izquierdas para la clave 20 y tres filas derechas para la clave 20 producen seis pares. La combinación no elige una sola fila derecha. En el ejemplo, añadir una segunda fila de consulta del cliente 20 aumenta el resultado interno de cuatro filas a seis.

Expresa la relación prevista con validate:

merged = orders.merge(
    customers, on="customer_id", how="left",
    validate="many_to_one"
)

Esto permite muchos pedidos por cliente, pero exige que los identificadores de cliente de la derecha sean únicos. Una clave derecha repetida genera un MergeError. one_to_one exige unicidad en ambos lados; one_to_many la exige en el lado izquierdo. many_to_many permite repeticiones en ambos lados y no comprueba la unicidad.

Investiga las filas sin correspondencia

Una combinación externa completa con indicator=True añade _merge. Aquí sus recuentos son cuatro both, uno left_only y uno right_only. Son filas, no claves distintas: los pedidos repetidos pueden producir varias filas both para un cliente.

Para contar las claves distintas sin correspondencia del lado de los pedidos, usa m.loc[m["_merge"] == "left_only", "customer_id"].nunique(). Inspeccionar las filas puede revelar entradas ausentes en la tabla de consulta o texto inconsistente.

Controla los nombres y formatos de las claves

Si las claves tienen nombres distintos, usa left_on="customer_id", right_on="id". Ambas columnas clave siguen disponibles. Se pueden relacionar varias claves conjuntamente con on=["city", "year"]; ambas deben coincidir.

Los nombres compartidos que no son clave reciben _x y _y. Elige sufijos significativos como suffixes=("_order", "_ship") para que los orígenes queden claros.

Las claves necesitan tipos de datos compatibles y valores iguales. El número 1 puede coincidir con el número 1,0, pero las columnas clave enteras y de texto pueden generar un error de combinación. Convierte sus formatos de forma deliberada. «ana» y «Ana » son textos distintos; estandariza las mayúsculas y minúsculas y los espacios exteriores antes de combinar cuando identifiquen a la misma persona.

Las claves faltantes también necesitan inspección: pandas hace coincidir las claves faltantes de un lado con las del otro. Si ambos lados contienen varias filas de este tipo, esas coincidencias también pueden multiplicarse.

Puntos clave

  • Indica explícitamente las claves de combinación.
  • Elige el tipo de combinación según las filas de origen que deban conservarse.
  • Las claves repetidas producen todos los pares coincidentes.
  • Usa validate para comprobar la relación prevista entre las claves.
  • Usa una combinación externa completa con un indicador para inspeccionar las filas sin correspondencia.
  • Comprueba los valores y formatos de las claves y los sufijos antes de usar el resultado.

4.2 Combina valores con etiquetas de índice coincidentes

Un índice puede contener la clave que quieres relacionar. pandas usa esas etiquetas al combinar tablas, completar valores faltantes o sumar dos Series. La posición de la fila por sí sola no determina las coincidencias.

Combina por etiquetas de índice

left.join(right) hace coincidir los dos índices y usa por defecto una combinación por la izquierda. En cambio, merge usa por defecto una combinación interna. También puedes escribir left.merge(right, left_index=True, right_index=True) cuando ambas claves están en el índice.

Supón que stations tiene las etiquetas de índice A, B, C y las altitudes 120, 850, 15 m. Una tabla de mediciones tiene las etiquetas de índice de estación A, B, B, D. readings.join(stations) conserva cuatro filas y añade las altitudes 120, 850, 850 y NaN. Las dos mediciones de B reciben la altitud de B. Con how="inner", solo se conservan las tres mediciones de A y B.

Si las mediciones guardan los identificadores de estación en una columna ordinaria, usa readings.join(stations, on="station"). La columna izquierda coincide con el índice derecho. La forma equivalente con merge es readings.merge(stations, left_on="station", right_index=True, how="left").

Haz explícita la ubicación de la clave

set_index("station") mueve la columna de estación al índice. reset_index() la restablece como columna ordinaria. Esto permite elegir una estructura que facilite la inspección de la correspondencia. left.join([t1, t2]) puede combinar a la vez varias tablas que comparten etiquetas de índice.

Si ambas tablas combinadas contienen una columna que no es clave, como source, join genera un ValueError salvo que distingas los nombres. En pandas 3.1, escribe suffixes=("_left", "_right"); esto sustituye a los argumentos anteriores lsuffix y rsuffix. Los sufijos conservan ambas versiones sin decidir cuál es la fuente autorizada.

Completa valores faltantes desde una fuente de respaldo

a.combine_first(b) conserva los valores conocidos de a, rellena sus valores faltantes con los de b que tienen etiquetas coincidentes e incluye las etiquetas que solo se encuentran en b.

Etiquetaaba.combine_first(b)
a1101
bNaN2020
c3303
dausente4040

El resultado conserva 1 y 3 porque la primera fuente ya los conoce. Usa 20 para rellenar el valor faltante y añade la etiqueta d con 40. Invertir la llamada cambia qué fuente tiene prioridad. Esto es útil cuando una fuente principal de datos debe prevalecer sobre una fuente de respaldo, incluso cuando el orden de sus filas difiere.

Reconoce la alineación en las operaciones aritméticas

Sea x con a = 5 y b = 7; sea y con b = 1 y c = 2. x + y da b = 8, con resultados faltantes en a y c porque a cada uno le falta un operando. No suma el primer valor de x al primer valor de y.

x.add(y, fill_value=0) aporta cero para el lado faltante y produce a = 5, b = 8, c = 2. Usa esa regla cuando una contribución ausente deba contar como cero. La alineación por etiquetas es la misma idea organizadora detrás de estas operaciones, pero sus reglas para los valores son distintas: join añade columnas, combine_first rellena valores faltantes y la aritmética calcula con valores coincidentes.

Puntos clave

  • join usa por defecto una combinación de índices por la izquierda; merge usa por defecto una combinación interna.
  • En join(on="station"), la columna izquierda coincide con el índice derecho.
  • Usa sufijos para distinguir las columnas compartidas que no son clave.
  • combine_first da prioridad a los valores conocidos del objeto que llama al método.
  • La aritmética se alinea por etiqueta; fill_value controla las contribuciones faltantes.

4.3 Apila tablas compatibles con concat

Los archivos mensuales suelen contener más filas del mismo tipo de observación. La concatenación reúne esas partes en una sola tabla. Alinea las etiquetas del otro eje; no busca valores coincidentes de claves de cliente o pedido.

Apila filas y alinea columnas

pd.concat([jan, feb]) apila filas porque la opción predeterminada es axis=0. Supón que enero tiene tres viajes con las columnas trip y km, mientras que febrero tiene dos viajes con trip, km y note. El resultado tiene cinco filas y tres columnas. Las celdas faltantes de note para enero se convierten en NaN.

join="outer" es la opción predeterminada: conserva la unión de los nombres de columna. join="inner" conserva solo los nombres compartidos, por lo que el resultado tiene cinco filas y las dos columnas trip y km. Sigue incluyendo las cinco observaciones; la opción join controla el otro eje.

El orden de las columnas en las partes no determina la correspondencia. La determinan los nombres exactos. Si una parte usa km y la otra usa Km, el resultado contiene dos columnas parcialmente vacías. Cambia los encabezados antes de concatenar.

Decide qué deben significar las etiquetas de fila

Los índices originales se conservan por defecto. Con los índices iniciales 0, 1, 2 y 0, 1, el resultado repite las etiquetas 0 y 1. result.loc[0] selecciona dos filas. Usa ignore_index=True cuando esos números no tengan significado y quieras etiquetas nuevas de 0 a 4.

Cuando importa la identidad del origen, usa un nivel externo del índice:

result = pd.concat(
    [jan, feb], keys=["jan", "feb"], names=["month", "row"]
)

Ahora result.loc["feb"] selecciona las dos filas de febrero. keys conserva el origen dentro de un MultiIndex. En pandas 3, combinar keys con ignore_index=True genera un ValueError; elige etiquetas de origen o un índice simple nuevo para esa operación.

Coloca columnas una junto a otra

pd.concat([x, y], axis=1) alinea las filas por etiqueta de índice. Para x con a = 1, b = 2 e y con b = 3, c = 4, el resultado tiene las filas a, b, c. Falta la columna x en c y falta y en a. Con join="inner", solo queda b.

OperaciónAñade porAlinea las etiquetas por
concat(..., axis=0)FilasNombres de columnas
concat(..., axis=1)ColumnasÍndices de filas
merge(..., on="id")Pares de filas coincidentesValores de la columna clave
Comprueba el almacenamiento y reúne las partes de forma eficiente

Una columna que mezcla valores numéricos y texto puede convertirse al tipo object. Si los datos ordinarios int64 de NumPy adquieren un valor faltante, se convierten en float64; el tipo "Int64" de pandas que admite valores faltantes puede conservar enteros con <NA>. Ajusta los tipos de datos antes de combinar cuando la columna tenga un tipo definido.

DataFrame.append se eliminó en pandas 2.0. Para muchos archivos, reúne los DataFrames en una lista y llama a pd.concat una sola vez después del bucle. Reconstruir un resultado creciente en cada iteración copia repetidamente los datos acumulados y se vuelve lento.

Comprueba que la longitud de una concatenación por filas sea igual a la suma de las longitudes de entrada. Después inspecciona los nombres de columna, los recuentos de valores faltantes y los tipos de datos.

Puntos clave

  • La concatenación por filas alinea nombres de columnas y suma los recuentos de filas de entrada.
  • join elige las etiquetas compartidas o todas las etiquetas del otro eje.
  • Usa ignore_index para etiquetas prescindibles o keys para identificar el origen.
  • La concatenación por columnas alinea los índices de filas.
  • Reúne primero muchas partes y concaténalas una sola vez.
5

Reestructura datos con índices jerárquicos, pivot y melt

Las mismas mediciones pueden organizarse como filas, columnas o niveles de un índice. Usa un MultiIndex para identificar observaciones con varias claves y después mueve esas claves con stack y unstack o con pivot y melt. Sigue qué etiquetas identifican una celda y si son únicas. Esto hace que la reestructuración sea predecible y permite distinguir una combinación ausente de un cero medido o de un par de registros que necesita una agregación explícita.

5.1 Selecciona filas con más de un nivel de índice

Un MultiIndex da a cada fila varias etiquetas. Una fila de ventas podría identificarse tanto por la ciudad como por el año, escritos como una tupla como ("Osaka", 2024). Cada etiqueta tiene un nivel, y el orden de esos niveles importa para la selección.

Crea y nombra el índice

df.set_index(["city", "year"]) mueve esas columnas al índice. pd.MultiIndex.from_product([["Lima", "Osaka"], [2024, 2025]], names=["city", "year"]) crea todas las combinaciones de las etiquetas proporcionadas. La concatenación con keys también añade un nivel.

Para los ejemplos, sales tiene estos pares de índice y valores:

cityyearsales
Osaka2024120
Osaka2025135
Lima202480
Lima202595

Después de establecer los dos niveles del índice, df.index.names es ["city", "year"]. rename_axis(["town", "yr"]) cambia los nombres de los niveles sin cambiar sus valores.

Selecciona una etiqueta externa o una tupla completa

df.loc["Osaka"] selecciona ambas filas de Osaka. El nivel de ciudad seleccionado desaparece y deja 2024 y 2025 como índice. df.loc[("Lima", 2025), "sales"] selecciona una celda y devuelve 95.

Una sola etiqueta pasada a loc busca en el nivel más externo. Por tanto, df.loc[2024] busca una ciudad llamada 2024 y genera un KeyError en esta tabla. Para seleccionar un año en todas las ciudades, usa df.xs(2024, level="year"). Devuelve 120 para Osaka y 80 para Lima, con la ciudad como índice restante.

Para una selección más general, df.loc[pd.IndexSlice[:, 2025], :] conserva todas las ciudades en el año 2025. Los dos puntos en la primera posición significan todas las etiquetas de ese nivel; los dos puntos finales seleccionan todas las columnas.

Ordena antes de seleccionar intervalos

La selección por etiqueta exacta no necesita un índice ordenado globalmente, pero seleccionar un intervalo de etiquetas requiere una ordenación adecuada. Usa df.sort_index() antes de df.loc["Lima":"Osaka"]. Un MultiIndex sin ordenar puede generar un UnsortedIndexError para esa selección.

sort_index() ordena todos los niveles en su orden actual, de modo que primero van las ciudades y, dentro de cada ciudad, los años. sort_index(level="year") ordena por el nivel nombrado. swaplevel("city", "year") coloca el año en la posición externa; después usa sort_index() para agrupar y ordenar la nueva disposición. Intercambiar solo las posiciones de los niveles no ordena las filas.

Devuelve las etiquetas a las columnas

reset_index() restablece ambos niveles como columnas. reset_index(level="year") restablece solo el año y deja la ciudad como índice. Estas operaciones permiten preparar una tabla para combinarla o guardarla sin perder sus valores identificadores.

Las columnas también pueden tener varios niveles. Una reestructuración con valores de ventas y personal puede producir las etiquetas de columna ("sales", 2024) y ("staff", 2025). df["sales"] selecciona todas las columnas bajo la etiqueta de nivel superior de ventas.

Para obtener un total por ciudad, df.groupby(level="city")["sales"].sum() da Lima 175 y Osaka 255. Usa la agrupación para este resumen; el antiguo argumento sum(level="city") se eliminó en pandas 2.0.

Puntos clave

  • Una tupla identifica una etiqueta completa de MultiIndex a través de los niveles.
  • La selección con una sola etiqueta en loc comienza en el nivel más externo.
  • Usa xs o IndexSlice para seleccionar un nivel interno.
  • Ordena el índice antes de seleccionar un intervalo de etiquetas.
  • Intercambia niveles para cambiar su función y restablécelos para recuperar columnas.
  • Usa groupby(level=...) para resumir por un nivel del índice.

5.2 Mueve etiquetas entre el índice y las columnas

stack y unstack cambian la ubicación de las etiquetas. Los valores conservan su combinación identificadora, pero la tabla puede mostrar combinaciones que no tenían ninguna observación.

Apila etiquetas de columna en el índice

Supón que un DataFrame ancho tiene las ciudades Osaka y Lima como índice y los años 2024 y 2025 como columnas. Osaka tiene los valores 120 y 135; Lima tiene 80 y 95. Nombra los ejes city y year para mantener visible su significado.

long = wide.stack() mueve las etiquetas de año a un nuevo nivel más interno del índice. Con estas columnas de un solo nivel, el resultado es una Series que contiene cuatro valores:

  • ("Osaka", 2024) da 120.
  • ("Osaka", 2025) da 135.
  • ("Lima", 2024) da 80.
  • ("Lima", 2025) da 95.

Las etiquetas de ciudad se repiten porque ahora cada ciudad tiene una fila por año. El apilamiento no ha sumado los valores ni creado mediciones adicionales.

Desapila un nivel del índice en columnas

long.unstack() mueve el nivel más interno del índice, el año, a las columnas y recupera la disposición ancha. long.unstack("city") mueve la ciudad en su lugar y produce años como filas y ciudades como columnas. Una posición numérica de nivel como unstack(0) puede seleccionar el mismo nivel, pero un nombre hace que la intención sea más fácil de entender.

OperaciónMovimiento de etiquetas
stack()Un nivel de columnas pasa a ser un nivel interno del índice
unstack()Un nivel del índice pasa a ser un nivel de columnas

Si la entrada tiene columnas jerárquicas, apilar un nivel puede dejar otro nivel como columnas. Para columnas como ("sales", 2024) y ("staff", 2024), stack("year") devuelve un DataFrame con columnas de ventas y personal. Apilar todos los niveles de columnas devuelve una Series.

Mantén visibles las combinaciones sin observaciones

Supón ahora que la Series larga no tiene una entrada para Lima en 2025. Al desapilar se crea una tabla rectangular de ciudad por año, por lo que se introduce NaN en esa posición. Los valores enteros ordinarios se convierten en flotantes cuando esta celda faltante requiere un marcador de valor faltante de tipo flotante.

unstack(fill_value=0) puede rellenar con cero una combinación que pasa a estar ausente. Úsalo solo si la ausencia significa cero, como la ausencia de ventas registradas en un conjunto completo de datos de ventas. Una observación faltante de un sensor es desconocida y debe seguir siendo un valor faltante.

stack() de pandas 3 conserva las celdas con valores faltantes. Por tanto, apilar la tabla incompleta de 2 por 2 devuelve cuatro entradas, incluida NaN. Añade .dropna() si solo quieres los tres valores conocidos. Eliminar valores faltantes cambia las combinaciones que siguen representadas, así que comprueba la longitud del resultado.

Resuelve primero las combinaciones duplicadas

Desapilar necesita un solo valor para cada combinación completa del índice. Dos entradas con la etiqueta ("Lima", 2025) compiten por la misma celda de salida y generan ValueError: Index contains duplicate entries, cannot reshape.

Usa long.index.duplicated() para inspeccionar las etiquetas completas repetidas, o comprueba las columnas clave correspondientes antes de establecer el índice. Decide si las filas son copias accidentales u observaciones separadas que deben combinarse. Eliminarlas o agregarlas es una decisión sobre los datos; unstack no elige una regla por ti.

Puntos clave

  • stack mueve las etiquetas de columna hacia el interior; unstack mueve las etiquetas del índice hacia el exterior.
  • Elige el nivel explícitamente cuando el predeterminado no sea el que necesitas.
  • Las combinaciones ausentes aparecen como celdas con valores faltantes al convertir a formato ancho.
  • El apilamiento de pandas 3 conserva los valores faltantes salvo que los elimines después.
  • Cada combinación completa del índice debe ser única para desapilar.

5.3 Convierte entre tablas largas y anchas

En formato largo, las columnas identificadoras acompañan a una columna de valores. En formato ancho, las mediciones se distribuyen en columnas, por ejemplo, una columna por año. Elige la estructura que facilite la siguiente tarea: las tablas largas son adecuadas para filtrar y agrupar, mientras que las tablas anchas facilitan las comparaciones lado a lado.

Convierte pares únicos en celdas

Una tabla larga con las columnas city, year y sales se convierte en ancha con df.pivot(index="city", columns="year", values="sales"). Las etiquetas de ciudad forman las filas, los años forman las columnas y las ventas rellenan las celdas. Es equivalente a df.set_index(["city", "year"])["sales"].unstack().

Las ventas de Osaka en 2024 y 2025, de 120 y 135, se convierten en dos celdas de una fila. Los valores de Lima, 80 y 95, forman la segunda fila. Intercambiar los argumentos index y columns transpone esta disposición. Omitir values convierte todas las columnas de datos restantes y puede crear columnas jerárquicas, como un nivel de ventas y otro de personal por encima de los años.

Decide si las repeticiones son errores u observaciones

pivot reorganiza valores y no puede combinarlos. Dos filas de Lima para 2025 necesitarían dos valores en una celda de salida, por lo que generan un ValueError. Cuenta los pares repetidos con df.duplicated(subset=["city", "year"]).sum().

Si deben combinarse observaciones separadas, usa pivot_table con una agregación elegida. Para los valores 95 y 105 de Lima en 2025, su media predeterminada da 100,0. Con aggfunc="sum", la celda es 200. Si cada par debía aparecer una sola vez, conserva pivot para que revele un error de datos en lugar de resumirlo sin avisar.

Convierte columnas de mediciones en filas

Supón que un CSV proporciona las columnas city, 2023, 2024 y 2025. Los valores de Osaka son 110, 120, 135; los de Lima son 70, 80, 95. Convierte las columnas de años a formato largo:

long = wide.melt(
    id_vars="city", var_name="year", value_name="sales"
)

id_vars permanece en su lugar y se repite. Cada etiqueta de columna de medición se convierte en un valor de año; cada celda se convierte en un valor de ventas. Dos filas y tres columnas de medición producen seis filas largas, incluida una como Osaka, «2023», 110. Las celdas de medición faltantes también se convierten en filas salvo que las elimines después.

Como estas etiquetas de columna procedían de texto CSV, los años resultantes son texto. Usa long["year"] = long["year"].astype(int) antes de hacer operaciones aritméticas con ellos. Las etiquetas de columna enteras de entrada ya darían valores de año enteros.

Controla qué se convierte y recupera la forma

value_vars=["2024", "2025"] limita la conversión a esas columnas. Olvidar id_vars puede convertir los nombres de ciudades a formato largo en la misma columna de valores que las mediciones. Distingue siempre los identificadores de las columnas que contienen valores.

Sin nombres explícitos, la columna de valores se llama value. La columna de variables hereda wide.columns.name o se llama variable si ese nombre está vacío. Los valores explícitos de var_name y value_name facilitan el uso del resultado.

Convierte las seis filas de nuevo a formato ancho con index="city", columns="year", values="sales" para recuperar las tres columnas de años. Después de la conversión, la ciudad es el índice y el eje de columnas se llama año. reset_index() restablece la ciudad como columna y rename_axis(columns=None) elimina el nombre del eje de columnas. Verifica tanto la forma como las etiquetas antes de combinar o guardar la tabla.

Puntos clave

  • El formato largo coloca las etiquetas de medición en filas; el formato ancho las coloca en columnas.
  • pivot necesita pares únicos de fila y columna y no realiza ninguna agregación.
  • pivot_table combina pares repetidos mediante la agregación elegida.
  • melt repite los identificadores y crea una fila por celda de medición.
  • Comprueba los tipos de las etiquetas de columna cuando se conviertan en valores.
  • Restablece los índices y los nombres de los ejes cuando necesites una tabla de salida plana.

Ejemplos de Preparación de datos con pandas

5 Lecciones Interactivas

1

Limpia mediciones sin perder su significado

16 pasos
Cuantifica los valores faltantes, elige un relleno o eliminación adecuados y resuelve los registros repetidos mediante una pequeña tabla meteorológica.
  1. 1
    IntroducciónDecide qué significa cada valor faltante

    Una tabla meteorológica tiene cuatro ciudades y dos columnas de mediciones: temperatura en °C y precipitación en mm. Faltan algunas mediciones. Localizarás esos valores faltantes, decidirás qué filas se pueden utilizar y distinguirás un registro repetido de una observación realmente distinta. El resultado útil es una tabla cuyos valores restantes siguen significando lo que crees que significan. Usa import pandas as pd e import numpy as np para el código.

  2. 2
    ExplicaciónReconoce el marcador de valor faltante

    Un valor faltante puede aparecer como NaN, NaT o pd.NA, según su tipo de datos. None también se reconoce como faltante.

    Usa df.isna() para crear una tabla booleana con True en cada valor faltante. Comparar con np.nan no detecta esos valores porque NaN es distinto incluso de sí mismo. El método de detección permite que la misma comprobación funcione en columnas numéricas, de texto y de fecha y hora.

  3. 3
    EjemploCuenta los valores meteorológicos faltantes

    Lima tiene temperatura 18 y precipitación 0. A Oslo le falta la temperatura, pero tiene precipitación 4. Pune tiene temperatura 31 y le falta la precipitación. A Kyiv le faltan ambas mediciones. Se conocen todos los nombres de ciudades.

    df.isna().sum() da ciudad 0, temperatura 2 y precipitación 2. df.isna().mean() da proporciones de valores faltantes de 0, 0,5 y 0,5 porque cada columna tiene cuatro entradas.

  4. 4
    Idea claveDistingue las celdas de las filas

    Kyiv tiene dos celdas con valores faltantes, mientras que Oslo y Pune tienen una cada una. Hay cuatro celdas con valores faltantes, pero solo tres filas afectadas.

    df.isna().sum().sum() cuenta las celdas. df.isna().any(axis=1).sum() primero marca si cada fila tiene algún valor faltante y después cuenta esas filas. any por fila evita que Kyiv se cuente dos veces.

  5. 5
    DesafíoDetecta un código oculto de valor faltante

    Una columna de sensor contiene 0, 7, -999 y NaN. Su documentación indica que -999 significa que el sensor estaba apagado. ¿Cuántos valores deben seguir siendo conocidos después de la limpieza?

    ---reveal---

    Dos: 0 y 7. Sustituye el código documentado -999 por un marcador de valor faltante y vuelve a usar isna(). Aquí cero es una medición real. Tratar todos los ceros como faltantes eliminaría un valor conocido junto con las mediciones no disponibles.

  6. 6
    EjemploConserva las filas que tienen temperatura

    Supón que el análisis necesita la temperatura, pero puede tolerar una precipitación desconocida. Usa clean = df.dropna(subset=["temp_c"]). Esto conserva Lima y Pune.

    La opción predeterminada dropna() conservaría solo Lima porque comprueba todas las columnas. thresh=2 también conservaría Oslo, cuya ciudad y precipitación se conocen. Elige la regla que exprese las columnas que el análisis realmente necesita.

  7. 7
    EjemploMarca las estimaciones antes de rellenar

    Para un análisis de precipitación que conserve todas las ciudades, parte de las cuatro filas originales. Antes de rellenar las temperaturas, guarda df["temp_missing"] = df["temp_c"].isna().

    Las temperaturas conocidas 18 y 31 tienen una media de 24,5. Asigna df["temp_c"] = df["temp_c"].fillna(df["temp_c"].mean()) para rellenar los dos huecos. El indicador guardado sigue identificando las mediciones de Oslo y Kyiv como estimadas.

  8. 8
    ConsejoElige la estimación según su significado

    Rellenar con la media usa las mediciones conocidas como una estimación sencilla, pero reduce la variación aparente. La mediana es menos sensible a las mediciones extremas. Rellenar con cero afirma algo distinto: que la cantidad faltante era cero.

    Un sensor de lluvia apagado no demuestra que la precipitación fuera cero. Usa rellenos por columna compatibles con sus tipos de datos, como un diccionario con valores numéricos para campos numéricos y texto para campos de texto.

  9. 9
    ConexiónUsa el orden solo cuando aporte información

    El relleno hacia adelante lleva el valor conocido anterior a un hueco; el relleno hacia atrás usa el siguiente. Con 12, NaN, NaN, 15, ffill(limit=1) da 12, 12, NaN, 15.

    La interpolación, en cambio, estima entre posiciones conocidas: 10, NaN, NaN, 16 se convierte en 10, 12, 14, 16. Estos métodos son adecuados para mediciones con un orden significativo, no para una lista de ciudades sin relación.

  10. 10
    DesafíoConserva filas útiles sin afirmar que no llovió

    Tres registros contienen A/19/2, B/21/NaN y C/NaN/5 para ciudad/temperatura/precipitación. Necesitas comparar temperaturas y no puedes estimar la precipitación faltante. ¿Qué filas y valores debes conservar?

    ---reveal---

    Conserva A y B comprobando la columna de temperatura con dropna(subset=["temp_c"]). Deja la precipitación de B como valor faltante. Eliminar según todas las columnas haría perder la temperatura útil de B; rellenar su precipitación con cero añadiría una medición sin fundamento.

  11. 11
    EjemploCompara registros completos

    Una tabla de pedidos tiene los identificadores 101, 102, 102, 103, 104, 104. Las dos filas de 102 son idénticas. Las dos filas de 104 difieren en el peso registrado: 0,5 kg y 0,8 kg.

    df.duplicated().sum() indica una copia adicional de fila completa. drop_duplicates() deja cinco filas porque los distintos registros de 104 no son copias exactas. Las etiquetas del índice no afectan a esta comparación.

  12. 12
    ExplicaciónElige una clave y una versión para conservar

    Comparar solo order_id marca el segundo 102 y el segundo 104 como repeticiones, lo que da dos copias adicionales de claves. Ahora la cuestión es qué versión representa a cada pedido.

    keep="last" elige la última en el orden actual de las filas. Para que eso signifique la más reciente, ordena primero por un campo de actualización. keep=False elimina todos los miembros de los grupos repetidos, por lo que descartaría ambos registros de 104.

  13. 13
    DesafíoConserva el registro más reciente

    El artículo H tiene actualizaciones 1, 4, 2 y pesos 3, 6, 5 kg en ese orden de entrada. ¿Cómo conservas su registro más reciente y qué peso queda?

    ---reveal---

    Ordena updated de forma ascendente y después usa drop_duplicates(subset="item", keep="last"). La actualización más reciente es 4, por lo que se conservan 6 kg. Conservar la última fila de entrada sin ordenar seleccionaría la actualización 2 y conservaría incorrectamente 5 kg.

  14. 14
    ConsejoEstandariza antes de comprobar la identidad

    Las claves de texto « Lisbon», «lisbon» y «LISBON » no coinciden exactamente. Elimina los espacios exteriores y conviértelas a minúsculas cuando esas variantes identifiquen la misma ciudad. Después inspecciona las claves repetidas.

    El propósito de la tabla determina si la repetición es válida: muchos pedidos pueden compartir un cliente, pero una tabla de consulta que debe proporcionar una fila de datos por cliente necesita claves únicas. Eliminar pedidos válidos no puede corregir una clave de consulta repetida.

  15. 15
    DesafíoRelaciona la limpieza de texto con la elección del registro

    Los registros de clientes tienen las claves « emi » y «EMI», las actualizaciones 2 y 5 y los saldos 10 y 14. Falta el saldo anterior en un tercer registro sin relación. Necesitas el registro más reciente por cliente. ¿Qué debe suceder antes de rellenar cualquier saldo?

    ---reveal---

    Estandariza las claves, ordena por actualización y conserva la última fila por clave limpia. Las dos variantes de Emi se convierten en un cliente con saldo 14. Resuelve primero la identidad de los registros para que las versiones obsoletas no influyan en un estadístico de relleno posterior.

  16. 16
    RepasoComprueba el resultado frente a la decisión

    Después de limpiar, compara el número de filas, los recuentos de valores faltantes y la unicidad de las claves con el resultado que pretendías obtener. Un indicador de valores faltantes mantiene visibles las estimaciones; una comprobación de duplicados por clave ordenada mantiene visible la versión elegida del registro.

    Guarda los objetos devueltos mediante asignación directa. Con la copia al escribir de pandas 3, una llamada encadenada con inplace en una columna seleccionada no actualiza su DataFrame original.

2

Transforma códigos y mediciones

15 pasos
Elige sustituciones exactas, correspondencias, conversión, intervalos, valores escalados e indicadores según la salida que necesites.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónElige el significado de la salida
  2. 2
    EjemploTransforma o modifica un valor
  3. 3
    EjemploConvierte el texto después de limpiar su formato
  4. 4
    Idea claveDistingue los encabezados de las celdas
  5. 5
    DesafíoLocaliza el origen de un nuevo valor faltante
  6. 6
    EjemploInterpreta los extremos de un intervalo
  7. 7
    ExplicaciónIncluye deliberadamente el límite inferior
  8. 8
    ConexiónElige amplitudes o recuentos
  9. 9
    DesafíoComprueba la regla de los límites
  10. 10
    EjemploResta el mínimo antes de dividir
  11. 11
    EjemploMide la distancia a la media
  12. 12
    ConsejoLimita sin eliminar una observación
  13. 13
    ExplicaciónRepresenta la pertenencia a categorías
  14. 14
    DesafíoExplica una fila de indicadores todos falsos
  15. 15
    RepasoVerifica la representación que creaste
3

Convierte texto inconsistente en etiquetas útiles

17 pasos
Limpia nombres, extrae cantidades de descripciones y conserva el significado de las etiquetas y el orden de las categorías.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDa al texto una estructura coherente
  2. 2
    ExplicaciónAplica un método a cada cadena
  3. 3
    EjemploDivide solo donde lo requiera el formato
  4. 4
    ConsejoMantén literal una búsqueda de texto
  5. 5
    DesafíoPrepara una clave de texto para combinar
  6. 6
    ExplicaciónCrea un patrón de cantidad
  7. 7
    EjemploExtrae la primera cantidad
  8. 8
    ConexiónElige todas las coincidencias cuando una no baste
  9. 9
    DesafíoRechaza una coincidencia parcial de código
  10. 10
    ConsejoLimita cuánto texto abarca un patrón
  11. 11
    EjemploSepara la lista de etiquetas de sus códigos
  12. 12
    ExplicaciónDa a las tallas el orden deseado
  13. 13
    ConsejoHaz espacio antes de asignar una etiqueta nueva
  14. 14
    DesafíoMantén visibles las categorías vacías
  15. 15
    ConexiónCombina categorías entre lotes
  16. 16
    DesafíoLimpia antes de definir la lista permitida
  17. 17
    RepasoInspecciona tanto los valores de texto como el almacenamiento
4

Combina tablas y ten en cuenta cada fila

18 pasos
Predice las coincidencias de claves, inspecciona los registros sin correspondencia, completa valores por etiqueta y elige cuándo concatenar observaciones.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónElige cómo se relacionan las tablas
  2. 2
    EjemploIndica explícitamente la clave compartida
  3. 3
    ExplicaciónConserva el lado que necesitas
  4. 4
    Idea claveEspera todos los pares coincidentes
  5. 5
    ConsejoConvierte la relación en una regla comprobada
  6. 6
    EjemploCuenta por separado las claves sin correspondencia
  7. 7
    DesafíoEncuentra la causa de las filas adicionales
  8. 8
    EjemploRelaciona una columna izquierda con un índice derecho
  9. 9
    ConsejoDistingue las columnas con nombres compartidos
  10. 10
    EjemploDa prioridad a la fuente principal
  11. 11
    ConexiónSigue las etiquetas al sumar valores
  12. 12
    DesafíoCompleta la observación correcta
  13. 13
    EjemploAñade observaciones haciendo coincidir los nombres de columnas
  14. 14
    ExplicaciónConserva una etiqueta de origen o crea un índice nuevo
  15. 15
    Idea claveAlinea las filas al añadir columnas
  16. 16
    DesafíoDiagnostica los nuevos valores faltantes de distancia
  17. 17
    DesafíoCombina lotes antes de añadir datos de consulta
  18. 18
    RepasoTen en cuenta las adiciones y coincidencias
5

Reestructura valores conservando sus etiquetas

18 pasos
Crea un MultiIndex, mueve niveles con stack y unstack y elige pivot o melt para los formatos largo y ancho.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónSigue la identidad de cada medición
  2. 2
    EjemploDa dos etiquetas a una fila
  3. 3
    ExplicaciónSelecciona el nivel que realmente necesitas
  4. 4
    ConsejoOrdena después de cambiar la función de los niveles
  5. 5
    DesafíoSelecciona un nivel interno sin cambiar los datos
  6. 6
    EjemploMueve las columnas de años al índice
  7. 7
    ExplicaciónElige el nivel que se convierte en columnas
  8. 8
    Idea claveReconoce un valor faltante que acaba de hacerse visible
  9. 9
    DesafíoDescubre por qué falla la conversión a formato ancho
  10. 10
    ConexiónElige formato largo o ancho para la siguiente tarea
  11. 11
    EjemploConvierte un par único en una celda
  12. 12
    ExplicaciónAgrega solo cuando sea lo previsto
  13. 13
    EjemploConvierte mediciones a formato largo conservando los identificadores
  14. 14
    ConsejoComprueba en qué tipo se convierte una etiqueta de columna
  15. 15
    DesafíoReconstruye una celda faltante en formato ancho
  16. 16
    ConexiónRecupera una tabla lista para operaciones con columnas
  17. 17
    DesafíoElige cómo resolver las mediciones repetidas
  18. 18
    RepasoComprueba la forma, la unicidad y el significado

Ejercicios de Preparación de datos con pandas

50 Preguntas de Práctica en 5 sets

Set 1: Interpreta los datos y predice cambios sencillos10 Preguntas de Práctica

Pregunta 1 de 10

Una Series de tipo flotante contiene 6, NaN y 12. ¿Cuál es su media predeterminada?
  1. 6,0
  2. 18,0
  3. 12,0
  4. 9,0
Mostrar respuestaOcultar respuesta
Respuesta: D
La media usa los dos valores conocidos, por lo que suma 6 y 12 y divide entre 2 para obtener 9,0. Dividir entre las tres posiciones da 6,0, lo que trata la entrada faltante como cero aunque no se haya observado ningún cero. len cuenta posiciones; la media predeterminada omite los valores faltantes.

Pregunta 2 de 10

Un DataFrame tiene celdas con valores faltantes en fila A/columna x, fila A/columna y y fila C/columna x. Las demás celdas son conocidas. ¿Cuántas filas cuenta df.isna().any(axis=1).sum()?
  1. 3
  2. 4
  3. 1
  4. 2
Mostrar respuestaOcultar respuesta
Respuesta: D
Las filas A y C contienen cada una al menos un valor faltante, por lo que se cuentan dos filas. La fila A aporta solo una vez a esta comprobación por filas a pesar de tener dos celdas con valores faltantes. Un total de tres contaría las celdas con valores faltantes en lugar de las filas afectadas.

Pregunta 3 de 10

Una tabla tiene las columnas item, mass_kg y note. La fila U tiene una masa conocida y una nota faltante; la fila V tiene una masa faltante y una nota conocida. Se conocen ambos nombres de artículo. ¿Qué conserva df.dropna(subset=["mass_kg"])?
  1. Ninguna de las filas
  2. Solo la fila V
  3. Solo la fila U
  4. Las dos filas
Mostrar respuestaOcultar respuesta
Respuesta: C
Solo la fila V tiene un valor faltante en la columna comprobada, por lo que se elimina y U permanece. Una nota faltante no importa para esta regla de selección. Eliminar ambas filas aplicaría la comprobación predeterminada más amplia de todas las columnas en lugar de la comprobación indicada solo para la masa.

Pregunta 4 de 10

Una Series contiene «A», «B» y «C». ¿Qué produce s.map({"A": "active", "B": "blocked"})?
  1. «active», «blocked», «blocked»
  2. «active», «blocked», NaN
  3. «active», «blocked», «C»
  4. «A», «B», NaN
Mostrar respuestaOcultar respuesta
Respuesta: B
Las dos claves del diccionario se transforman en sus valores de salida indicados y C pasa a ser faltante porque la correspondencia no tiene una entrada para C. Conservar la C original es el comportamiento de replace con este diccionario. Un diccionario pasado a map define las salidas de toda la correspondencia, no solo modificaciones de valores seleccionados.

Pregunta 5 de 10

Los valores 0, 10 y 20 se pasan a pd.cut(x, [0, 10, 20]) con las opciones predeterminadas. ¿Dónde queda 10?
  1. Queda en (0, 10].
  2. Pertenece a ambos intervalos.
  3. Queda en (10, 20].
  4. Pasa a ser faltante.
Mostrar respuestaOcultar respuesta
Respuesta: A
Los intervalos predeterminados incluyen su extremo derecho y excluyen su extremo izquierdo. Por tanto, diez pertenece al primer intervalo, cuyo límite derecho es 10. Colocarlo en el segundo intervalo usaría intervalos cerrados por la izquierda, lo que requiere right=False.

Pregunta 6 de 10

Una Series de ciudades contiene « Accra», «ACCRA » y «accra». Después de s.str.strip().str.lower(), ¿cuántos valores distintos y filas quedan?
  1. 1 valor distinto, 3 filas.
  2. 3 valores distintos, 3 filas.
  3. 1 valor distinto, 1 fila.
  4. 2 valores distintos, 3 filas.
Mostrar respuestaOcultar respuesta
Respuesta: A
Eliminar los espacios exteriores y convertir a minúsculas hace que cada entrada sea «accra», por lo que hay un valor distinto en las tres filas originales. La limpieza de cadenas cambia valores sin eliminar registros. Un resultado de una fila requeriría una operación adicional de eliminación de duplicados, que no se ha realizado.

Pregunta 7 de 10

Un código de producto es «72x». ¿Cómo lo clasifican str.contains(r"\d+") y str.fullmatch(r"\d+")?
  1. Contains es verdadero; fullmatch es falso.
  2. Ambos devuelven verdadero.
  3. Contains es falso; fullmatch es verdadero.
  4. Ambos devuelven falso.
Mostrar respuestaOcultar respuesta
Respuesta: A
El código contiene una secuencia de dígitos, por lo que la búsqueda en cualquier posición encuentra una coincidencia. La x final impide que todo el código se ajuste a un patrón de solo dígitos, por lo que fullmatch falla. Tratar el prefijo numérico como una coincidencia completa aceptaría texto fuera del formato requerido.

Pregunta 8 de 10

Las entregas tienen las claves de depósito P, P, Q, R. Una tabla de depósitos tiene las claves P, P, Q, S. ¿Cuántas filas resultan de una combinación externa completa por la clave?
  1. 8
  2. 7
  3. 6
  4. 9
Mostrar respuestaOcultar respuesta
Respuesta: B
Las dos filas P de cada lado producen cuatro pares y Q aporta una fila coincidente. R y S añaden cada una una fila sin correspondencia, para un total de siete. Seis omitiría uno de los lados sin correspondencia o contaría de menos los pares de claves repetidas; una combinación externa completa conserva las claves sin correspondencia de ambos lados.

Pregunta 9 de 10

El lote A de dos filas tiene las columnas id, km. El lote B de tres filas tiene las columnas id, km, flag. ¿Qué forma resulta de pd.concat([a, b], ignore_index=True)?
  1. 6 filas, 3 columnas
  2. 3 filas, 3 columnas
  3. 5 filas, 3 columnas
  4. 5 filas, 2 columnas
Mostrar respuestaOcultar respuesta
Respuesta: C
La concatenación por filas suma las longitudes de entrada, lo que da cinco filas, y conserva la unión de los nombres de columnas, lo que da tres columnas. Las dos filas de A reciben valores faltantes en flag. Dos columnas requerirían join="inner"; restablecer el índice no descarta una columna adicional.

Pregunta 10 de 10

Una tabla ancha tiene 3 filas de estaciones y las columnas station, dry y wet. ¿Qué longitud resulta de convertir las dos columnas de medición a formato largo con id_vars="station"?
  1. 9 filas
  2. 6 filas
  3. 3 filas
  4. 2 filas
Mostrar respuestaOcultar respuesta
Respuesta: B
Cada una de las tres filas de estación aporta una medición dry y una wet, lo que produce seis filas largas. El identificador de estación se repite, no se convierte a formato largo. Nueve trataría incorrectamente el identificador como una tercera columna de medición; solo las dos columnas de valores seleccionadas contribuyen al multiplicador de filas.
Set 2: Elige métodos para tareas habituales de preparación de datos10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Los identificadores en orden de fila son K, L, L, M, M, N. ¿Qué identificadores quedan después de drop_duplicates(subset="id", keep=False)?
  1. K, N
  2. L, M
  3. K, L, N
  4. K, L, M, N
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una Series ordenada es 5,0, NaN, NaN, 11,0. ¿Qué produce ffill(limit=1)?
  1. 5, NaN, 11, 11
  2. 5, 8, NaN, 11
  3. 5, 5, NaN, 11
  4. 5, 5, 5, 11
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una Series contiene «900», «1,600» y «bad». Después de eliminar literalmente las comas y aplicar pd.to_numeric(..., errors="coerce"), ¿qué valores quedan?
  1. 900, 1600, 0
  2. «900», «1600», «bad»
  3. 900, NaN, NaN
  4. 900, 1600, NaN
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una Series no constante contiene 5, 15 y 25. ¿Cuál es el valor de 15 después del escalado mínimo-máximo?
  1. 0,0
  2. 0,6
  3. 0,5
  4. 0,4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una columna categórica permite «low» y «high». ¿Qué debe ocurrir antes de poder asignar «medium» a una fila?
  1. Ordenar sus códigos de categoría existentes.
  2. Eliminar las categorías existentes no utilizadas.
  3. Añadir «medium» a sus categorías.
  4. Activar el orden de sus categorías actuales.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una Series contiene «Park Rd», «Rd» y «Road». ¿Qué resulta de s.replace("Rd", "Road")?
  1. «Park Rd», «Road», «Road»
  2. «Park Rd», «Rd», «Road»
  3. «Park Road», «Road», «Road»
  4. «Park Road», «Rd», «Road»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Una tabla de sensores tiene las claves S, S, T y debe conservar todas las observaciones. Su tabla de consulta tiene una fila para S y otra para T. ¿Qué opciones de combinación expresan este requisito?
  1. how="left", validate="one_to_many"
  2. how="outer", validate="one_to_one"
  3. how="inner", validate="one_to_one"
  4. how="left", validate="many_to_one"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

La Series a tiene p = 4, q = NaN; la Series b tiene q = 9, r = 2. ¿Cuál es el resultado de a.combine_first(b)?
  1. p = 4, q = 9
  2. p = 4, q = 9, r = 2
  3. p = 4, q = NaN
  4. p = NaN, q = 9, r = 2
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una tabla indexada por sitio/mes tiene las mediciones 2 y 5 para C/6, la medición 4 para D/6 y la medición 9 para C/7. Una persona intercambia los niveles y después intenta usar .loc["C"] para obtener los totales por sitio del mes 6. ¿Qué corrección conserva las mediciones y da los totales necesarios?
  1. Agrupar todas las filas por sitio antes de seleccionar el informe: C = 16, D = 4.
  2. Usar xs("C", level="site") y agrupar después por mes: 6 = 7, 7 = 9.
  3. Eliminar los pares sitio/mes repetidos y seleccionar después el mes 6: C = 2, D = 4.
  4. Usar xs(6, level="month") y agrupar después por sitio: C = 7, D = 4.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una Series larga tiene las mediciones de sitio/período A/1 = 2, A/1 = 4, A/2 = 5, B/1 = 3. Las dos mediciones de A/1 deben promediarse; una combinación ausente es desconocida. Necesitas todas las combinaciones de sitio/período en un informe ancho y después una exportación larga. ¿Qué procedimiento es adecuado?
  1. Promediar A/1, desapilar, apilar y eliminar valores faltantes: 3 entradas conocidas.
  2. Promediar A/1, desapilar y apilar: 4 entradas, una faltante.
  3. Conservar el primer A/1, desapilar y apilar: 4 entradas, una faltante.
  4. Promediar A/1, desapilar rellenando con cero y apilar: 4 entradas conocidas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Sigue etiquetas, claves y cambios de forma10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una Series tiene los valores "", " " y None, creados directamente en memoria. ¿Cuántos valores cuenta s.isna().sum()?
  1. 3
  2. 1
  3. 2
  4. 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Las filas del artículo Z tienen los valores de actualización 2, 5 y 3, con masas de 8, 11 y 9 kg respectivamente. ¿Qué masa se conserva después de ordenar las actualizaciones de forma ascendente y conservar la última clave de artículo duplicada?
  1. 8 kg
  2. 28 kg
  3. 11 kg
  4. 9 kg
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una Series contiene ocho mediciones distintas del 1 al 8. ¿Cuántas mediciones entran en cada uno de los cuatro grupos de qcut?
  1. 1
  2. 8
  3. 2
  4. 4
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Las descripciones son «Oats 18kg, 4kg» y «Tea». ¿Qué devuelve s.str.extract(r"(\d+)\s*kg", expand=False) seguido de una conversión numérica?
  1. 18 y NaN
  2. 18 y 0
  3. 22 y NaN
  4. 4 y NaN
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una columna de texto tiene los valores «small», «large», «medium». En pandas 3.1 se convierte a una variable categórica fija con las categorías ["small", "large"] y después se cuenta con dropna=False. ¿Qué recuentos aparecen?
  1. small 1, large 2, faltante 0
  2. small 1, large 1, faltante 1
  3. small 1, large 1, faltante 0
  4. small 1, large 1, medium 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Una combinación externa completa une las claves izquierdas A, A, B, D con las claves derechas A, A, A, C. ¿Cuáles son los recuentos de filas de _merge para both, left_only y right_only?
  1. 6, 2, 1
  2. 6, 1, 1
  3. 3, 2, 1
  4. 2, 2, 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

La Series x tiene a = 2, b = 6 e y tiene b = 4, c = 8. Después de x.add(y, fill_value=0), ¿cuál es la suma de los valores resultantes?
  1. 24
  2. 12
  3. 20
  4. 10
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un índice tiene niveles de ciudad externo y año interno. Después de swaplevel("city", "year").sort_index(), ¿qué selecciona .loc[2027]?
  1. Filas desde 2027 en adelante.
  2. La fila en la posición 2027.
  3. La ciudad etiquetada 2027.
  4. Todas las filas del año 2027.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Los recuentos de eventos son N/1 = 7, N/2 = 9, S/1 = 3, sin registro para S/2. El registro de eventos está completo, por lo que la ausencia significa que no hubo eventos. Un informe debe mostrar cada par de sitio/período y mantener esa cobertura en una exportación larga. ¿Qué procedimiento y resultado son adecuados?
  1. Desapilar, apilar y rellenar hacia adelante: 4 entradas que suman 22.
  2. Desapilar, apilar y eliminar valores faltantes: 3 entradas que suman 19.
  3. Desapilar rellenando con cero y después apilar: 3 entradas que suman 19.
  4. Desapilar rellenando con cero y después apilar: 4 entradas que suman 19.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una tabla larga tiene los valores 8 y 12 para P/2026 y el valor 6 para Q/2026. ¿Qué resulta de una pivot_table con sitios como filas, años como columnas y la agregación predeterminada, seguida de la conversión a formato largo de la única columna de año?
  1. 2 filas con los valores 10, 6
  2. 3 filas con los valores 10, 10, 6
  3. 3 filas con los valores 8, 12, 6
  4. 2 filas con los valores 20, 6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Diagnostica cambios en un proceso de limpieza10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Las mediciones de una columna numérica son 2, 4, 30, NaN. Guardas un indicador de valores faltantes y después rellenas el hueco con la mediana de la columna. ¿Qué valor se usa para rellenar y cuántos valores del indicador son verdaderos?
  1. 3 y 1
  2. 4 y 0
  3. 12 y 1
  4. 4 y 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Una tabla contiene las claves « seoul», «SEOUL» y «busan». Sus demás datos coinciden dentro de cada ciudad. Después de eliminar los espacios exteriores y convertir la clave a minúsculas, ¿cuántas filas quedan al eliminar todos los miembros de los grupos de claves repetidas?
  1. 3
  2. 1
  3. 2
  4. 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

El texto numérico original es «5», «none», None, « 9 ». Después de to_numeric(errors="coerce"), ¿cuántos valores presentes originalmente han pasado a ser faltantes?
  1. 3
  2. 0
  3. 2
  4. 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una columna de masas contiene 0, 10, 20 y una medición desconocida. Después de cut con los límites [0, 10, 20] y los indicadores predeterminados, dos filas tienen todos sus indicadores falsos. Necesitas categorizar las masas válidas e identificar por separado las mediciones desconocidas. ¿Qué corrección es adecuada?
  1. Eliminar las filas con todos los indicadores falsos y conservar los límites originales.
  2. Cambiar a right=False y mantener desactivados los indicadores de valores faltantes.
  3. Incluir el límite inferior y usar dummy_na=True al codificar.
  4. Rellenar la masa desconocida con 0 y aplicar cut con include_lowest=True.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué hace s.str.split("/", n=1, expand=True) con «zone/aisle/bin»?
  1. Crea 3 columnas: «zone», «aisle», «bin».
  2. Crea 1 columna con el texto original.
  3. Crea 2 columnas: «zone», «aisle/bin».
  4. Crea 2 columnas: «zone/aisle», «bin».
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Los códigos son «T.8», «T18» y «T.12». Debes seleccionar los códigos que contienen un punto literal, extraer después sus dígitos finales con r"(\d+)" y convertirlos. ¿Qué valores numéricos quedan?
  1. 8 y 12
  2. 8, 18, 12
  3. Solo 18
  4. 8 y 1
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Los envíos tienen las claves de proveedor « ax », «AX», «by». Una tabla de consulta tiene «ax», «ax», «by», con datos distintos en sus dos filas ax. ¿Qué debe resolverse antes de que una combinación por la izquierda pueda proporcionar de forma fiable una fila de datos por envío?
  1. Conservar solo el primer envío de cada clave.
  2. Estandarizar solo el texto de las claves de envío.
  3. Cambiar solo los nombres de las columnas de datos compartidas.
  4. Estandarizar las claves y resolver las claves de consulta duplicadas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

La tabla a tiene dos filas con las columnas id, km. La tabla b tiene una fila con las columnas id, Km. Después de concatenar por filas con el tratamiento predeterminado de columnas, ¿cuántas celdas tienen valores faltantes en las dos columnas de distancia en conjunto?
  1. 3
  2. 2
  3. 1
  4. 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Un MultiIndex de región/año contiene E/2025 = 3, E/2026 = 5, W/2025 = 7, W/2026 = 11. Un informe necesita solo 2026, con las regiones como columnas. Una persona selecciona .loc[2026] y después convierte a formato ancho. ¿Qué corrección selecciona los datos y produce una sola fila de informe?
  1. Seleccionar xs(2025, level="year"), restablecer el año como 2026 y convertir por año/región: 3 y 7.
  2. Seleccionar xs(2026, level="year"), restablecer el año como 2026 y convertir por año/región: 5 y 11.
  3. Seleccionar xs(2026, level="year"), restablecer el año como 2026 y convertir por año/región: 8 y 18.
  4. Sumar por región, restablecer el año como 2026 y convertir por año/región: 8 y 18.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una tabla tiene tres sitios únicos, con las columnas site, day y night. Falta una celda de night. Después de convertir ambas mediciones a formato largo, eliminar los valores faltantes y volver a convertir a formato ancho, ¿cuántas filas largas y celdas faltantes en formato ancho hay?
  1. 5 filas y 0 valores faltantes
  2. 5 filas y 1 valor faltante
  3. 6 filas y 0 valores faltantes
  4. 6 filas y 1 valor faltante
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Razona sobre transformaciones encadenadas10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Una columna numérica en memoria contiene 0, -99, NaN y 6. Su documentación define -99 como faltante y 0 como una medición real. Después de la limpieza, ¿cuáles son el recuento de valores conocidos y la media?
  1. 2 conocidos, media 3
  2. 3 conocidos, media 2
  3. 3 conocidos, media -31
  4. 2 conocidos, media 6
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Las filas son A/2/desconocido, B/desconocido/8, C/desconocido/desconocido, D/6/10 para sitio/x/y. Conserva cada fila con al menos una medición conocida y después rellena solo x con la media de sus valores conservados. ¿Qué regla de filas y suma final de x son adecuadas?
  1. Conservar al menos 2 celdas conocidas por fila; suma de x 8.
  2. Eliminar cada fila con una medición faltante; suma de x 6.
  3. Conservar al menos 2 celdas conocidas por fila; suma de x 12.
  4. Conservar al menos 1 celda conocida por fila; suma de x 16.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Una Series contiene los códigos «a», «b» y «z». El proceso aplica la correspondencia {"a": "4", "b": "bad"} y después realiza una coerción numérica. ¿Qué entradas originales terminan siendo faltantes y por qué?
  1. Solo b, porque bad no es numérico.
  2. b y z, por fallos de conversión y de correspondencia.
  3. Solo z, porque su clave no está presente.
  4. a y b, por transformar texto con apariencia numérica.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Las mediciones originales son 3, 9, 21, 45. Una columna transformada contiene 0, aproximadamente 0,333, 1, 1 en el mismo orden. ¿Qué secuencia de operaciones explica la salida y conserva todas las filas?
  1. Limitar a 21 y después aplicar escalado mínimo-máximo a la columna limitada.
  2. Dividir entre 45 y después limitar los valores escalados a 1.
  3. Limitar a 21 y después dividir la columna limitada entre 21.
  4. Aplicar escalado mínimo-máximo a la columna original y después limitar a 1.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una variable categórica sin ordenar contiene etiquetas de países y tiene códigos enteros. Un modelo interpreta las entradas numéricas como cantidades. ¿Por qué deben sustituirse estos códigos por indicadores de categoría?
  1. Los códigos no pueden almacenarse en columnas numéricas.
  2. Los indicadores crean una clasificación correcta de países.
  3. Los códigos impondrían un orden y unas distancias inventados.
  4. Los códigos usan más memoria que todos los valores de texto.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Los envíos tienen las claves U, U, V, W. Una tabla de consulta de proveedores tiene U/actualización 1, U/actualización 4, V/actualización 2, X/actualización 2. Necesitas los datos más recientes por proveedor, conservar todos los envíos y contar las claves distintas sin correspondencia de ambas fuentes. ¿Qué procedimiento es adecuado?
  1. Conservar las claves de consulta más recientes; revisar con combinación externa completa; la combinación interna tiene 3 filas y 2 claves sin correspondencia.
  2. Conservar las claves de consulta más recientes; revisar con combinación interna; la combinación por la izquierda tiene 4 filas y 0 claves sin correspondencia.
  3. Conservar un envío por clave; revisar con combinación externa completa; la combinación por la izquierda tiene 3 filas y 2 claves sin correspondencia.
  4. Conservar las claves de consulta más recientes; revisar con combinación externa completa; la combinación por la izquierda tiene 4 filas y 2 claves sin correspondencia.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Los valores principales son a = 5, b = NaN; los valores de respaldo son a = 50, b = 7, c = 9. Después de primary.combine_first(backup), ¿qué cambiaría al invertir la prioridad de las fuentes?
  1. Solo c desaparece del resultado.
  2. Solo a cambia de 5 a 50.
  3. Todos los valores del resultado cambian.
  4. Solo b cambia de 7 a faltante.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Dos DataFrames tienen cada uno las columnas kg y count, ambas con "Int64", que admite valores faltantes. Un tercero solo tiene kg con ese tipo. Después de concatenar por filas, ¿qué explica mejor la columna count resultante?
  1. Pierde todas las filas de la tercera entrada.
  2. Sigue siendo de tipo entero que admite valores faltantes, con huecos para la tercera entrada.
  3. Es de texto porque una entrada omitió count.
  4. Se convierte en entero ordinario con ceros para la tercera entrada.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Los registros de eventos son A/1 = 4, A/1 = 6, A/2 = 8, B/1 = 3. El registro está completo y un informe debe mostrar el total de cada sitio/período, incluidos los pares sin eventos, y después exportar la misma cobertura como filas largas. ¿Qué procedimiento da la exportación requerida?
  1. Sumar los pares repetidos, desapilar rellenando con cero y apilar: 4 filas, suma 21.
  2. Conservar el primer par repetido, desapilar rellenando con cero y apilar: 4 filas, suma 15.
  3. Promediar los pares repetidos, desapilar rellenando con cero y apilar: 4 filas, suma 16.
  4. Sumar los pares repetidos, desapilar, apilar y eliminar valores faltantes: 3 filas, suma 21.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Los recuentos de eventos conocidos son A/1 = 4, A/1 = 8, A/2 = 6, B/1 = 5; B/2 no tiene registro y es desconocido. Una persona usa una tabla dinámica predeterminada y después la convierte a formato largo, afirmando que exporta totales de los pares conocidos. ¿Qué salida revisada y razonamiento son adecuados?
  1. Cuatro filas que suman 23, porque convertir a formato largo recupera ambos registros A/1.
  2. Cuatro filas que suman 23, porque el cero puede sustituir al par desconocido.
  3. Tres filas que suman 17, porque la media predeterminada es el total de un par.
  4. Tres filas que suman 23, después de agregar mediante suma y eliminar las celdas desconocidas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

72 Términos Clave, cada uno con su definición

A

Accesor de texto str
El accesor de texto str proporciona métodos de texto vectorizados en una Series, lo que permite limpiar o buscar en cada cadena presente.
Usa el accesor str en s.str.lower() para convertir una columna completa de ciudades a minúsculas en una expresión.
Agrupación en intervalos por cuantiles
La agrupación en intervalos por cuantiles divide mediciones ordenadas en grupos con recuentos de observaciones aproximadamente iguales, cuyas amplitudes numéricas pueden diferir.
Usa la agrupación en intervalos por cuantiles con qcut para comparar grupos bajos, medios y altos que contienen cantidades similares de mediciones.
Alineación por etiquetas
La alineación por etiquetas empareja valores de pandas por sus etiquetas de fila o columna, de modo que objetos ordenados de forma distinta pueden seguir relacionando las mismas observaciones.
Al sumar dos Series, la alineación por etiquetas suma los valores etiquetados con b aunque b ocupe una posición distinta en cada Series.
Apilamiento de columnas en el índice (stack)
El método stack mueve un nivel de etiquetas de columnas a un nivel interno del índice de filas y devuelve una Series o un DataFrame según los niveles restantes.
Llamar a stack en una tabla de ciudades con columnas de años da pares de ciudad y año en el índice para los mismos valores de ventas.
Aplicación de una correspondencia o función (map)
El método map transforma los valores de una Series mediante una función o una correspondencia; una correspondencia mediante diccionario convierte las claves desconocidas en valores faltantes.
Un map de códigos de países muestra los códigos ausentes del diccionario como valores faltantes que se pueden inspeccionar.

B

Búsqueda de coincidencias literales
La búsqueda de coincidencias literales busca los caracteres exactos proporcionados sin dar significado de patrón a símbolos especiales de expresiones regulares, como un punto.
Usa la búsqueda de coincidencias literales para eliminar el punto de un código sin tratarlo como un patrón para cualquier carácter.

C

Cadena sin procesar (raw string)
Una cadena sin procesar es una forma de cadena de Python precedida por r que conserva las barras invertidas para usos como los patrones de expresiones regulares.
Escribe un patrón de dígitos como cadena sin procesar, r"\d+", para que su barra invertida llegue al motor de expresiones regulares.
Cambio de etiquetas (rename)
El método rename cambia las etiquetas de filas o columnas mediante una correspondencia o función y deja intactos los valores de datos almacenados.
Usa rename(columns={"Weight": "mass_kg"}) para dar un significado claro a un encabezado sin modificar sus celdas.
Caracteres de espacio en blanco
Los caracteres de espacio en blanco incluyen caracteres como espacios y tabulaciones, que pueden tener significado dentro de un texto o ser indeseados alrededor de una etiqueta.
Los espacios en blanco exteriores hacen que «Lima » sea distinto de «Lima» hasta que se eliminan con str.strip().
Categoría no utilizada
Una categoría no utilizada es una etiqueta categórica permitida sin observaciones actuales que permanece en los recuentos hasta que se elimina de la lista.
Una categoría no utilizada L aparece con recuento 0 cuando una columna de tallas contiene actualmente solo S y M.
Clase de caracteres
Una clase de caracteres describe un carácter permitido mediante una forma abreviada como \d o un intervalo como [A-Z] en un patrón.
La clase de caracteres [A-Z] coincide con una letra mayúscula en un código de inventario antes de sus dígitos.
Clave de origen
Una clave de origen proporcionada a concat se convierte en una etiqueta externa del índice que identifica la parte de la que procede cada fila o columna.
Una clave de origen llamada «batch_a» permite recuperar esas filas incluso cuando los números de fila internos se repiten entre lotes.
Clave de registro
Una clave de registro es una columna o combinación de columnas que identifica un registro real y define qué repeticiones deben investigarse.
Un identificador de pedido es una clave de registro, mientras que un identificador de cliente puede aparecer legítimamente en varios pedidos separados.
Código de categoría
Un código de categoría es un identificador entero que apunta a una etiqueta de una lista categórica, sin implicar una distancia medida entre las etiquetas.
Un código de categoría para un país es un identificador de almacenamiento, así que no lo trates como el rango numérico del país.
Coerción de tipos
La coerción de tipos en to_numeric convierte en números los valores que puede interpretar y transforma las entradas que no puede interpretar en valores faltantes, en lugar de generar un error.
Después de la coerción, inspecciona el texto original de cada masa que haya pasado a ser faltante para detectar formatos no reconocidos.
Coincidencia completa
Una coincidencia completa exige que toda la cadena de entrada se ajuste a un patrón, por lo que un fragmento válido dentro de un valor más largo no es suficiente.
Una coincidencia completa con r"\d+" acepta «204» y rechaza «204x», aunque ambas cadenas contienen dígitos.
Columna indicadora
Una columna indicadora marca si una fila pertenece a una categoría, normalmente con valores booleanos o con ceros y unos para una entrada numérica.
Una columna indicadora de «blue» creada con get_dummies es verdadera solo en las filas etiquetadas como blue.
Columnas identificadoras (id_vars)
El argumento id_vars identifica las columnas que se conservan durante la conversión a formato largo y separa los identificadores de observaciones de las columnas que contienen mediciones.
Establecer id_vars="station" mantiene los nombres de estaciones fuera de las mediciones numéricas creadas por melt.
Combinación con prioridad del primer objeto (combine_first)
El método combine_first conserva los valores conocidos de un primer objeto, rellena sus valores faltantes con los de etiquetas coincidentes de otro objeto y añade etiquetas nuevas.
Usa combine_first para completar mediciones faltantes desde una fuente de respaldo mientras conservas los valores conocidos de la fuente principal.
Combinación externa completa (outer join)
Una combinación externa completa conserva las claves presentes en cualquiera de los lados y muestra campos faltantes cuando una clave no tiene una fila coincidente en la otra entrada.
Una combinación externa completa muestra tanto los pedidos sin datos de cliente como los clientes sin ningún pedido registrado.
Combinación interna (inner join)
Una combinación interna conserva los pares de filas cuyas claves coinciden en ambos lados y excluye las observaciones que no tienen una clave coincidente en la otra tabla.
Una combinación interna elimina una entrega cuyo identificador de estación no tiene una fila coincidente en la tabla de consulta de estaciones.
Combinación por claves (merge)
Una combinación por claves relaciona filas mediante valores de clave y combina sus campos, produciendo todos los pares coincidentes permitidos por el tipo de combinación elegido.
Una combinación por claves añade una fila de consulta de cliente a cada pedido cuya clave de cliente tiene un valor coincidente.
Combinación por índices
Una combinación por índices relaciona tablas mediante etiquetas de índice; join de pandas usa el índice derecho incluso cuando se especifica una columna clave izquierda.
Una combinación por índices puede añadir altitudes de estaciones a mediciones repetidas sin emparejarlas por posición de fila.
Combinación por la izquierda (left join)
Una combinación por la izquierda conserva cada fila del lado izquierdo y sus coincidencias, y proporciona campos derechos faltantes cuando una clave izquierda no tiene correspondencia.
Una combinación por la izquierda conserva un pedido con una clave de cliente desconocida para que sus datos de consulta faltantes sigan visibles.
Combinación sin observaciones
Una combinación sin observaciones es un conjunto de etiquetas sin una observación correspondiente, que al convertir a formato ancho puede aparecer como una celda con un valor faltante en una tabla rectangular.
Una combinación sin observaciones para una estación y un mes aparece como NaN cuando se desapilan las mediciones largas.
Concatenación
La concatenación coloca objetos de pandas por filas o columnas mientras alinea las etiquetas del otro eje, sin hacer coincidir valores de claves ordinarias.
La concatenación por filas reúne lotes sucesivos de observaciones de paquetes en una tabla más larga.
Conversión a formato ancho (pivot)
El método pivot convierte datos largos a formato ancho colocando los pares elegidos de índice y columna en celdas; genera un error cuando un par identifica varios valores.
Un pivot de estación y mes requiere una medición para cada celda de estación/mes en la salida.
Conversión a formato largo (melt)
El método melt convierte columnas de medición en filas de etiqueta/valor y conserva y repite las columnas identificadas como identificadores de fila.
Un melt de cuatro columnas de años crea cuatro filas por ciudad, incluidas las filas de celdas de medición vacías.
Conversión de tipos
La conversión de tipos cambia la forma en que se almacenan e interpretan los valores, por ejemplo, al convertir texto de dígitos en números para operaciones aritméticas.
La conversión de tipos es necesaria antes de que el texto «7.5» pueda usarse como una masa medida en un cálculo numérico.
Copia al escribir (Copy-on-Write)
La copia al escribir evita que los cambios en un objeto de pandas seleccionado modifiquen sin avisar otro objeto que comparte sus datos subyacentes.
Con la copia al escribir, asigna una Series rellenada de nuevo a su columna del DataFrame para actualizar la tabla original.
Creación de una tabla dinámica con agregación (pivot_table)
El método pivot_table combina valores de pares repetidos de índice y columna mediante una agregación y usa la media cuando no se especifica ninguna.
Usa pivot_table con aggfunc="sum" cuando los envíos separados deban sumarse en un total diario.

D

Desapilamiento de un nivel del índice en columnas (unstack)
El método unstack mueve un nivel del índice de filas a las columnas y requiere etiquetas completas de índice únicas para colocar un valor en cada celda de salida.
Usa unstack("year") para colocar cada año en una columna de ventas separada para cada ciudad.
División de cadenas de texto
La división de cadenas de texto separa el texto por un delimitador elegido y produce listas de partes o columnas separadas cuando se solicita la expansión.
Dividir una cadena por «, » convierte «Silva, Ana» en una parte con el apellido y otra con el nombre.

E

Eje
Un eje es una dirección de un objeto de pandas; la concatenación por el eje 0 añade filas y por el eje 1 añade columnas.
Elige el eje 1 para colocar dos Series de mediciones una junto a otra con etiquetas de índice coincidentes.
Eliminación según valores faltantes (dropna)
El método dropna elimina filas o columnas según sus valores faltantes y ofrece opciones para seleccionar columnas y exigir recuentos de valores presentes.
Usa dropna(subset=["mass_kg"]) cuando las filas utilizables deban tener una masa aunque otro campo esté incompleto.
Escalado mínimo-máximo
El escalado mínimo-máximo resta el mínimo de una columna y divide entre su rango distinto de cero, transformando el mínimo observado en 0 y el máximo en 1.
Para las mediciones 2, 5, 8, el escalado mínimo-máximo da 0, 0,5, 1 usando el rango original de 6.
Expresión regular
Una expresión regular es un patrón de texto construido con reglas de caracteres y repetición que se usa para comprobar, extraer o sustituir texto estructurado.
Una expresión regular puede encontrar una masa entera seguida de «kg» incluso cuando varían los espacios.

F

Fila duplicada
Una fila duplicada repite otra fila en todas las columnas comparadas; por defecto, pandas marca las copias posteriores e ignora las etiquetas del índice.
Una fila duplicada con un índice numérico distinto sigue contando como copia cuando coinciden todos sus valores de datos.
Formato ancho
El formato ancho distribuye las mediciones entre varias columnas y a menudo da a cada entidad una fila y a cada etiqueta de medición su propia columna.
El formato ancho coloca tres cifras de ventas anuales junto a cada ciudad para compararlas directamente entre años.
Formato largo
El formato largo almacena las etiquetas de medición como valores en columnas identificadoras, con las observaciones en filas y una columna compartida de valores de medición.
El formato largo coloca ciudad, año y ventas en columnas para que cada observación de ciudad y año ocupe una fila.

G

Grupo de captura
Un grupo de captura marca parte de una expresión regular con paréntesis para que el texto coincidente pueda devolverse como un campo de salida extraído.
Un grupo de captura alrededor de los dígitos en un patrón de masa devuelve «14» del texto «Lentils 14 kg».

I

Imputación
La imputación sustituye datos faltantes por valores estimados o elegidos, conservando las filas mientras cambia la distribución observada de una columna.
La imputación por la media rellena una temperatura faltante con la media de las mediciones conocidas y reduce la dispersión aparente.
Indicador de procedencia de la combinación
Un indicador de procedencia de la combinación etiqueta cada fila resultante según el origen de su correspondencia: ambas entradas, solo la entrada izquierda o solo la entrada derecha.
Cuenta los valores del indicador de procedencia después de una combinación externa completa para localizar las filas sin correspondencia en cualquiera de los lados.
Interpolación
La interpolación estima valores entre mediciones conocidas; la interpolación lineal de pandas usa sus posiciones para rellenar siguiendo una línea recta.
La interpolación convierte las mediciones ordenadas 8, NaN, 12 en 8, 10, 12 cuando una estimación en línea recta es adecuada.
Intervalo de clase
Un intervalo de clase es un intervalo numérico usado para agrupar mediciones, con extremos definidos que determinan a dónde pertenecen los valores situados en los límites.
En un intervalo escrito como (0, 10], la medición 10 está incluida y la medición 0 está excluida.

Í

Índice jerárquico (MultiIndex)
Un índice jerárquico identifica una fila o columna de pandas con varios niveles de etiquetas, de modo que una etiqueta completa es una tupla de valores de esos niveles.
Un MultiIndex con ciudad y año identifica por separado las mediciones de una misma ciudad para cada año.

L

Limitación de valores extremos
La limitación de valores extremos sustituye las mediciones que superan un límite elegido por el propio límite, conservando las observaciones mientras cambia sus valores.
Limitar a 80 kg cambia una entrada de 95 kg a 80 kg, así que inspecciona primero si esa medición extrema es real.

M

Marcador de fecha u hora faltante (NaT)
NaT es el marcador de pandas para valores faltantes de fecha y hora; permite que una columna de fecha y hora represente una fecha o marca de tiempo no disponible.
Una fecha de inspección ausente aparece como NaT, y isna() la detecta junto con las mediciones numéricas faltantes.
Máscara de valores faltantes
Una máscara de valores faltantes es un objeto booleano que marca dónde faltan valores y tiene las mismas etiquetas y forma que el objeto comprobado.
Sumar una máscara de valores faltantes por columna muestra cuántas celdas de temperatura y precipitación necesitan atención.

N

Nivel del índice
Un nivel del índice es un componente etiquetado de un índice jerárquico, como ciudad o año, con una posición y un nombre opcional.
Mover el año al nivel externo del índice hace que sea la primera etiqueta usada por una selección con una sola etiqueta en loc.
No es un número (NaN)
NaN es un marcador de valor faltante usado en columnas de tipo flotante y en las columnas de texto predeterminadas de pandas 3; es distinto de sí mismo en las comprobaciones ordinarias de igualdad.
Usa isna() para detectar NaN en la columna de temperatura antes de contar las mediciones disponibles para una media.
Normalización de mayúsculas y minúsculas
La normalización de mayúsculas y minúsculas da al texto un uso coherente de las letras para que las versiones en mayúsculas y minúsculas puedan compararse como una misma etiqueta.
La normalización de mayúsculas y minúsculas hace que «PUNE» y «pune» coincidan antes de contar o combinar sus registros.

O

Omisión del índice original (ignore_index)
La opción ignore_index sustituye las etiquetas del eje de concatenación por enteros consecutivos y conserva la alineación en el otro eje.
Establece ignore_index=True cuando los archivos mensuales tengan números de fila prescindibles que de otro modo se repetirían.
Operación vectorizada
Una operación vectorizada actúa sobre toda una Series o un arreglo y expresa el mismo cálculo para todos los valores sin un bucle de Python por elemento.
Multiplicar la columna de kilómetros por 1000 es una operación vectorizada que produce distancias en metros.
Ordenación por el índice
La ordenación por el índice ordena las filas por sus etiquetas de índice, lo que permite usar intervalos de etiquetas y agrupar un MultiIndex según el orden de sus niveles.
Aplica la ordenación por el índice después de intercambiar los niveles de ciudad y año para que las filas sigan el nuevo orden con el año primero.

P

Puntuación z
Una puntuación z expresa la distancia de un valor por encima o por debajo de la media, dividida entre la desviación estándar usada para esa columna.
Una puntuación z de -1 sitúa una medición una desviación estándar por debajo de la media, no en un intervalo con nombre.

R

Reestructuración de datos
La reestructuración de datos cambia la disposición de los valores y sus etiquetas identificadoras entre filas y columnas sin elegir por sí misma una agregación.
Reestructurar una Series completa de ciudad y año en una tabla ancha conserva cada valor en su combinación de ciudad y año.
Relación de varios a uno
Una relación de varios a uno permite claves izquierdas repetidas, pero exige claves derechas únicas, como muchos pedidos que coinciden con un registro de cliente.
Valida una relación de varios a uno al añadir datos a entregas desde una tabla de consulta con una fila por estación.
Relleno hacia adelante
El relleno hacia adelante copia el valor conocido más reciente en los valores faltantes posteriores según un orden significativo de filas, y se detiene en un límite de secuencia opcional.
Un relleno hacia adelante puede llevar un ajuste estable de un instrumento a la siguiente fila, pero no puede rellenar un valor faltante inicial.
Relleno hacia atrás
El relleno hacia atrás copia el siguiente valor conocido en los valores faltantes anteriores, por lo que su significado depende del orden de las observaciones.
Un relleno hacia atrás toma la siguiente medición conocida como valor de relleno para una medición anterior no disponible.
Repetición voraz
La repetición voraz abarca tanto texto como sea posible sin impedir que coincida el resto del patrón, y a veces se extiende por varios delimitadores.
La repetición voraz en r"<.*>" puede abarcar ambas etiquetas y el texto entre ellas en una cadena corta con marcado.
Restablecimiento del índice (reset_index)
El método reset_index mueve uno o más niveles del índice a columnas ordinarias y proporciona un índice para la disposición restante.
Usa reset_index(level="year") para restablecer el año como columna y dejar la ciudad en el índice.

S

Sección transversal
Una sección transversal selecciona un valor de un nivel nombrado del índice a través de los demás niveles, lo que permite seleccionar directamente un nivel interno.
Una sección transversal para el año 2026 recupera ese año en todas las ciudades de un MultiIndex de ciudad y año.
Selección de columnas para la comprobación (subset)
El argumento subset limita una comprobación de duplicados o datos faltantes a las columnas nombradas y deja las demás columnas fuera de esa decisión.
Usa subset="order_id" para detectar claves de pedido repetidas incluso cuando sus pesos registrados sean distintos.
Sufijo
Un sufijo es texto añadido a los nombres compartidos de columnas que no son clave durante una combinación para distinguir el origen de cada columna.
Un sufijo como _sensor mantiene una columna de mediciones diferenciada de la columna del mismo nombre en una tabla de respaldo.
Sustitución de valores (replace)
El método replace sustituye valores que coinciden exactamente y deja sin cambios las entradas sin coincidencia, mediante un escalar, una lista o un diccionario.
Un diccionario de replace puede cambiar «pending» por «open» sin modificar los demás valores de estado.

T

Tipo de datos categórico
Un tipo de datos categórico almacena una lista definida de etiquetas y un código entero por fila, con un orden significativo opcional de las etiquetas.
Un tipo de datos categórico puede almacenar un conjunto pequeño de etiquetas repetidas de tallas de productos de forma más eficiente que el texto repetido.
Tipo de datos que admite valores faltantes
Un tipo de datos que admite valores faltantes almacena valores de un tipo especificado junto con un marcador de valor faltante, como "Int64" para enteros con pd.NA.
Un tipo de datos que admite valores faltantes conserva los recuentos de paquetes como enteros incluso cuando un registro tiene un recuento desconocido.

U

Unicidad
La unicidad significa que ningún valor de clave ni combinación de claves comprobados se repite; es un requisito de las tablas de consulta con una fila por clave.
Comprueba la unicidad en la tabla de consulta de clientes antes de añadir sus datos a una tabla con muchos pedidos.
Unión de categorías
Una unión de categorías combina las etiquetas permitidas por las entradas categóricas para que la concatenación pueda conservar una salida categórica con distintas listas.
Usa una unión de categorías cuando dos lotes tengan distintos colores permitidos y la columna combinada deba conservar ambas listas.

V

Valor faltante (valor perdido)
Un valor faltante señala una observación desconocida o no disponible mediante un marcador reconocido por pandas en lugar de datos ordinarios.
Un valor faltante en rain_mm significa que la medición no está disponible, por lo que debe distinguirse de la ausencia de lluvia.
Variable categórica ordenada
Una variable categórica ordenada tiene una secuencia declarada de etiquetas que determina la ordenación y las comparaciones de orden en lugar de la escritura alfabética.
Una variable categórica ordenada con S, M, L coloca las tallas en la secuencia prevista al ordenar la columna.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar