- Aprender
- Informática
- Ciencia de datos e IA
- Análisis de datos con Python
- Series y DataFrames de pandas
Series y DataFrames de pandas: primeros pasos
loc y por posición con iloc. Filtra filas mediante condiciones, añade y transforma columnas, ordena valores, asígnales rangos y resume los datos con estadísticos descriptivos, frecuencias absolutas y correlación. Los ejemplos siguen pandas 3.IntermedioUnidad 2 de 8 del curso Curso de Análisis de datos con Python
Lo que aprenderás
- Describe cómo almacena pandas datos etiquetados de una y dos dimensiones, crea Series y DataFrames a partir de datos de Python y gestiona sus etiquetas de filas y columnas.
- Crea una Series y utiliza su índiceCrea una Series a partir de una lista o un diccionario, lee sus valores, índice, tipo de datos y nombre, y predice cómo se comportan las etiquetas en operaciones aritméticas y búsquedas.
- Crea un DataFrame e interpreta su estructuraCrea un DataFrame a partir de datos de Python, interpreta su forma, columnas, índice y tipos de datos, selecciona una columna como Series y usa correctamente el argumento axis.
- Establece, restablece, cambia y elimina etiquetasElige un índice de filas significativo, devuélvelo a una columna, cambia los nombres y elimina filas o columnas, y conserva los resultados mediante reasignación.
- Crea una Series y utiliza su índice
- Lee un archivo CSV en un DataFrame con las opciones adecuadas, inspecciona el resultado de forma sistemática y convierte las columnas a los tipos que necesita el análisis.
- Lee un archivo CSV con read_csvCarga un archivo separado por comas con
pd.read_csv, comprende cómo infiere pandas los tipos de las columnas y usa las opciones de separadores, decimales, encabezados, valores faltantes e identificadores. - Inspecciona un DataFrame nuevoComprueba una tabla recién cargada con
head,info,shape,dtypes, recuentos de valores faltantes y recuentos de valores distintos antes de analizarla. - Convierte las columnas a los tipos adecuadosCambia el tipo de datos de una columna con
astype,pd.to_numericypd.to_datetime, y conserva la columna convertida asignándola de nuevo.
- Lee un archivo CSV con read_csv
- Selecciona exactamente las filas, columnas y valores individuales que necesitas con
loc(etiquetas) eiloc(posiciones), y predice la forma y el tipo de cada resultado.- Selecciona filas y columnas por etiqueta con locUsa
df.loc[rows, columns]con etiquetas individuales, listas, segmentos con ambos extremos incluidos y máscaras booleanas, y reconoce cuándo no existe una etiqueta. - Selecciona por posición con iloc y elige el selector adecuadoUsa
df.iloc[rows, columns]con posiciones enteras, segmentos que excluyen el extremo final y posiciones negativas, lee valores individuales conateiaty decide entre la selección por etiqueta y por posición.
- Selecciona filas y columnas por etiqueta con loc
- Conserva solo las filas que cumplen una o varias condiciones mediante máscaras booleanas, los métodos auxiliares para pruebas habituales y
query, y modifica de forma segura los valores de las filas seleccionadas.- Filtra con máscaras booleanasCrea a partir de una comparación una máscara de True/False, combina condiciones con
&,|y~, cuenta las coincidencias y comprende cómo se comportan los valores faltantes en las comparaciones. - Utiliza métodos auxiliares y query para filtros habitualesFiltra con
isin,between,isna/notnaystr.contains, y escribe las mismas condiciones como una cadena legible dequery. - Modifica de forma segura los valores de las filas seleccionadasActualiza los valores de las filas que cumplen una condición con una sola asignación mediante
locy evita la asignación encadenada, que no modifica la tabla original en pandas 3.
- Filtra con máscaras booleanas
- Crea columnas nuevas a partir de las existentes con aritmética vectorizada y
assign, y recodifica o transforma valores connp.where,map,applyyreplace.- Calcula columnas nuevas a partir de las existentesAñade o sobrescribe una columna con aritmética vectorizada, usa
assignpara crear columnas en una cadena y predice cómo afectan al resultado los valores faltantes y la alineación por índices. - Recodifica y transforma valores con np.where, map y applyConvierte condiciones en etiquetas con
np.where, traduce valores conmapyreplace, aplica tus propias funciones conapplyy prefiere las formas vectorizadas cuando existan.
- Calcula columnas nuevas a partir de las existentes
- Ordena filas por una o varias columnas, asigna rangos a los valores con una regla adecuada para los empates, calcula estadísticos descriptivos para columnas numéricas y de texto, y cuenta valores y relaciones.
- Ordena filas por sus valores o por el índiceOrdena un DataFrame por una o varias columnas en cualquier dirección, controla la ubicación de los valores faltantes y el orden de los empates, y encuentra las filas con valores más altos o más bajos.
- Asigna rangos a los valores y resuelve los empatesAsigna a cada valor su rango con
rank, elige un método para resolver empates que se ajuste al propósito y expresa los rangos como percentiles. - Resume columnas mediante estadísticos descriptivosCalcula recuentos, totales, medidas de tendencia central, dispersión y cuartiles con métodos de pandas y
describe, interprétalos y trata correctamente los valores faltantes y las columnas de texto. - Cuenta valores y mide relacionesCuenta cuántas veces aparece cada valor, enumera los valores distintos, expresa los recuentos como proporciones y mide la relación lineal entre dos columnas numéricas mediante la correlación.
- Ordena filas por sus valores o por el índice
Guía de estudio de Series y DataFrames de pandas
1Comprende las Series y los DataFrames
Las etiquetas convierten una secuencia de números en datos que puedes identificar y combinar. Crea una Series para una variable y un DataFrame para varias variables, y después interpreta sus dimensiones y tipos. Verás por qué importa emparejar etiquetas en las operaciones aritméticas, en qué se diferencia una columna de una tabla de una columna y cómo elegir, restablecer o cambiar el nombre de un índice modifica las búsquedas posteriores. Estas estructuras sirven de base para todas las selecciones y cálculos que siguen.
1.1 Crea una Series y utiliza su índice
Una Series mantiene una secuencia de valores junto con sus etiquetas. Esas etiquetas dan significado a los valores: una medición de lluvia corresponde a un día y una población corresponde a una ciudad. Importa pandas y NumPy con sus nombres cortos habituales.
import pandas as pd
import numpy as np
rain = pd.Series([4.5, 3.0, 6.2],
index=["Mon", "Tue", "Wed"], name="rain_mm")
Lee valores y etiquetas
Los valores son 4,5; 3,0 y 6,2; el índice es Mon, Tue y Wed. Sin index=, pandas proporciona las etiquetas 0, 1 y 2. Un diccionario proporciona ambos a la vez: pd.Series({"Lima": 10, "Oslo": 5, "Pune": 7}) toma sus etiquetas de las claves, en el orden del diccionario.
Los atributos describen la Series sin paréntesis: rain.index contiene las etiquetas, rain.dtype es float64, rain.name es "rain_mm" y rain.size es 3. Usa rain.to_numpy() cuando necesites un arreglo de NumPy. El atributo más antiguo .values devuelve distintos tipos de arreglo según el tipo de datos; los datos de texto pueden dar un arreglo de pandas.
Un tipo de datos indica a pandas qué clase de valores almacena. Los tipos habituales son int64 para enteros, float64 para decimales, bool para True/False, str para texto y datetime64 para fechas y horas. pandas 3 infiere el texto como str; los ejemplos antiguos suelen mostrar object.
Trabaja con toda la Series
Para s = pd.Series([10, 20, 30], index=["a", "b", "c"]), s * 2 produce los valores 20, 40 y 60. s > 15 produce False, True y True. Ambos conservan las etiquetas. Estas operaciones son vectorizadas: una expresión actúa sobre toda la Series sin un bucle de Python.
Busca una etiqueta con s["b"], que da 20. Busca una posición con s.iloc[0], que da 10. La expresión "b" in s comprueba el índice; 20 in s es False. Incluso un entero entre corchetes es una etiqueta: con el índice [2, 0, 1], s[0] significa la etiqueta 0, no la primera entrada. Con etiquetas de texto, s[0] genera KeyError en pandas 3.
Empareja etiquetas en operaciones aritméticas
a = pd.Series([1, 2, 3], index=["x", "y", "z"])
b = pd.Series([10, 20, 30], index=["y", "z", "w"])
a + b
La etiqueta compartida y combina 2 y 10 para dar 12,0; z combina 3 y 20 para dar 23,0. Las etiquetas w y x aparecen en una sola entrada, por lo que reciben NaN. El resultado incluye las cuatro etiquetas. Sumar según la posición visual de las filas daría incorrectamente 11, 22 y 33.
Usa a.add(b, fill_value=0) cuando un valor ausente deba contar como cero. Sus resultados son w 30,0, x 1,0, y 12,0 y z 23,0. Entre los métodos relacionados están sub, mul y div.
Reconoce los valores faltantes
Un valor faltante de coma flotante o str usa NaN; una fecha u hora faltante usa NaT; un entero faltante en un tipo que admite valores faltantes usa <NA>. pd.Series([1, None, 3]) pasa a ser float64 y muestra 1,0, NaN y 3,0, porque el tipo habitual int64 no puede contener NaN.
Puntos clave
- Una Series combina una secuencia de valores con un índice, un tipo de datos y un nombre opcional.
- Usa una etiqueta para buscar y
ilocpara una posición; las pruebas de pertenencia comprueban las etiquetas. - La aritmética vectorizada actúa sobre todos los valores y conserva el índice.
- Dos Series se alinean por etiqueta; las etiquetas sin correspondencia dan resultados faltantes salvo que se indique un valor de relleno.
- Los marcadores de valores faltantes dependen del tipo de datos:
NaN,NaTo<NA>.
1.2 Crea un DataFrame e interpreta su estructura
Un DataFrame es una tabla bidimensional. Cada fila registra una observación, como un pedido; cada columna contiene una variable, como una cantidad. Las columnas pueden tener distintos tipos de datos, pero comparten el mismo índice de filas.
Crea una tabla a partir de datos de Python
df = pd.DataFrame({
"product": ["Notebook", "Desk lamp", "Pen set", "Mug"],
"quantity": [3, 1, 2, 4],
"unit_price": [2.50, 18.00, 4.75, 6.00]
})
Cada clave del diccionario se convierte en un nombre de columna; cada lista proporciona los valores de esa columna. Las listas deben tener la misma longitud para que cada fila tenga un lugar en cada columna. Aquí las etiquetas del índice van de 0 a 3. Las listas de distinta longitud generan un ValueError.
Una lista de diccionarios, en cambio, proporciona un diccionario por fila. pd.DataFrame([{"a": 1, "b": 2}, {"a": 3, "c": 4}]) crea las columnas a, b y c. La b que falta en la segunda fila y la c que falta en la primera se convierten en NaN, por lo que esas columnas usan float64. Un arreglo bidimensional de NumPy también puede proporcionar valores, con columns=[...] para nombrar las columnas.
Interpreta las dimensiones de la tabla
df.shape es (4, 3): cuatro filas y tres columnas, en ese orden. len(df) es 4, mientras que df.size es 12 porque cuenta las celdas. df.index contiene las etiquetas de fila, df.columns contiene las etiquetas de columna y df.dtypes da un tipo de datos por columna. Estos son atributos: df.shape() intenta llamar a una tupla y genera TypeError. df.T intercambia filas y columnas.
Conserva una Series o conserva una tabla
| Selección | Resultado |
|---|---|
df["quantity"] | Una Series |
df[["quantity"]] | Un DataFrame de una columna |
df[["product", "unit_price"]] | Un DataFrame con dos columnas en ese orden |
La lista interior solicita una colección de columnas. Sin ella, df["product", "unit_price"] proporciona una sola clave de tipo tupla, que no coincide con ninguno de los nombres de columna habituales y genera KeyError.
Los corchetes también funcionan cuando los nombres contienen espacios o coinciden con métodos. La notación con punto, como df.quantity, solo funciona para nombres adecuados. Una columna llamada size necesita df["size"], porque df.size significa el número de celdas de la tabla. Crea también las columnas con corchetes: df["total"] = 5 añade una columna, mientras que df.total = 5 no lo hace.
Elige un eje
Para numbers = pd.DataFrame({"a": [1, 2], "b": [3, 4]}), numbers.sum() suma a lo largo de las filas y da a 3 y b 7. Este es axis=0, también llamado "index". numbers.sum(axis=1) suma a lo largo de cada fila y da 4 y 6; este eje también se llama "columns". Identifica primero el resultado que necesitas: un total por columna o un total por fila.
Al extraer una fila se crea una Series cuyas etiquetas son los nombres de las columnas. Esa Series necesita un tipo de datos capaz de contener todas las celdas de la fila. Una fila que mezcla enteros y números de coma flotante pasa a ser float64; una fila que mezcla texto y números pasa a ser object. Las columnas originales conservan sus tipos por separado.
Puntos clave
- Un DataFrame tiene un índice de filas compartido y un tipo de datos por columna.
- Las listas de igual longitud proporcionan columnas; una lista de diccionarios proporciona filas.
shapecuenta filas y columnas;sizecuenta celdas.- Un solo nombre de columna devuelve una Series; una lista de nombres devuelve un DataFrame.
axis=0reduce a lo largo de las filas;axis=1reduce a lo largo de las columnas.- Usa corchetes para nombres de columnas que coinciden con atributos o métodos.
1.3 Establece, restablece, cambia y elimina etiquetas
Las etiquetas de fila pueden tener significado, como un número de pedido, o simplemente etiquetar las filas actuales. Elegir un índice útil facilita la interpretación de las búsquedas y los resultados posteriores. Cambiar las etiquetas devuelve una tabla nueva, así que conserva el resultado con una asignación.
Mueve un identificador al índice
orders = pd.DataFrame({
"order_id": [1001, 1002, 1003],
"product": ["Notebook", "Desk lamp", "Pen set"],
"unit_price": [2.50, 18.00, 4.75]
})
orders_by_id = orders.set_index("order_id")
La tabla original tiene un RangeIndex predeterminado: 0, 1 y 2. La tabla nueva tiene las etiquetas 1001, 1002 y 1003. order_id ha salido de las columnas y ha pasado al índice. orders_by_id.loc[1002] identifica ahora la fila de Desk lamp por su identificador.
Llamar a orders.set_index("order_id") sin guardar su resultado deja orders sin cambios. La reasignación, como orders = orders.set_index("order_id"), conserva la nueva estructura. En pandas 3.1, inplace= está obsoleto para estos métodos que cambian etiquetas y para la ordenación; usa una asignación.
Devuelve las etiquetas a una columna
orders_by_id.reset_index() restablece order_id como columna normal y proporciona un RangeIndex nuevo. Un índice sin nombre se convierte en una columna llamada index. Esto conserva la identidad anterior de las filas.
reset_index(drop=True) descarta las etiquetas anteriores. Para un índice [10, 20, 30], reset_index() sin más conserva esos números en una columna index; reset_index(drop=True) los pierde y usa 0, 1 y 2. Después de filtrar u ordenar, decide si las etiquetas anteriores son útiles antes de descartarlas. Volver a numerar el índice no cambia los valores de los datos ni deshace una ordenación.
Cambia o elimina etiquetas
renamed = orders.rename(columns={"unit_price": "price"})
short = orders.drop(columns=["product"])
remaining = orders.drop(index=[0, 1])
rename establece una correspondencia entre etiquetas antiguas y nuevas y conserva los nombres que no se enumeran. Por defecto, un nombre antiguo mal escrito se ignora, así que inspecciona .columns si parece que un cambio de nombre no ha hecho nada. Para sustituir todos los nombres de columna, asigna una lista completa a orders.columns; su longitud debe coincidir con el número de columnas.
drop(columns=...) elimina columnas; drop(index=...) elimina filas por etiqueta. Una etiqueta ausente genera KeyError. Después de ordenar, la etiqueta 0 puede dejar de ser la primera fila: eliminarla sigue quitando la fila con etiqueta 0.
Selecciona una lista para elegir el orden de las columnas: orders = orders[["order_id", "unit_price", "product"]]. Las columnas ausentes de esa lista se eliminan del resultado.
Comprueba que un identificador identifica realmente una fila
Las etiquetas del índice pueden repetirse. Comprueba orders_by_id.index.is_unique antes de tratarlas como identificadores únicos. Si la etiqueta 1002 aparece dos veces, .loc[1002] devuelve ambas filas como DataFrame. Con etiquetas únicas, la misma búsqueda por una sola etiqueta devuelve una Series.
Un índice significativo también mejora los resúmenes. En una tabla meteorológica indexada por día, weather["temp_c"].idxmax() informa de un día como "Thu"; con un índice predeterminado informa de un número de fila.
Puntos clave
set_indexmueve una columna a las etiquetas de fila;reset_indexdevuelve las etiquetas a una columna.reset_index(drop=True)descarta las etiquetas anteriores.- Conserva los cambios de etiquetas asignando la tabla devuelta.
renamecambia las etiquetas indicadas;dropelimina filas o columnas por etiqueta.- Un índice puede contener duplicados; comprueba su unicidad antes de usarlo como identificador.
2Carga un archivo CSV y comprueba los datos cargados
Una tabla cargada necesita una comprobación antes de que sus números puedan servir de base para un análisis. Ajusta las opciones de CSV al delimitador, encabezado y convenciones de valores del archivo, y después inspecciona el resultado para comprobar las filas, nombres y tipos esperados. Localiza las entradas faltantes y los identificadores repetidos, y convierte el texto numérico o de fechas cuando sea necesario. Las pequeñas decisiones de importación importan: un cero inicial perdido o una fecha sin interpretar pueden cambiar el significado del código posterior.
2.1 Lee un archivo CSV con read_csv
Un CSV almacena una tabla como texto: los registros ocupan líneas y un delimitador separa los campos. La primera línea suele contener los nombres de las columnas. Cargar el archivo correctamente implica identificar tanto su estructura como el significado de sus valores.
Carga la tabla de pedidos
orders = pd.read_csv("orders.csv")
Una ruta relativa se resuelve a partir del directorio de trabajo actual de Python. Una ubicación incorrecta genera FileNotFoundError. También se puede pasar una ruta absoluta o una URL a read_csv.
Los ejemplos usan este archivo. La última fila tiene un campo de cantidad vacío.
order_id,date,product,category,quantity,unit_price
1001,2026-03-02,Notebook,Stationery,3,2.50
1002,2026-03-02,Desk lamp,Home,1,18.00
1003,2026-03-03,Pen set,Stationery,2,4.75
1004,2026-03-04,Mug,Home,4,6.00
1005,2026-03-04,Backpack,Bags,1,35.00
1006,2026-03-05,Notebook,Stationery,,2.50
Con las opciones predeterminadas, el resultado tiene forma (6, 6) y etiquetas de índice de 0 a 5. pandas infiere los tipos: order_id es int64, unit_price es float64 y quantity también pasa a ser float64 porque su campo vacío se convierte en NaN. Las demás columnas, incluida date, son str. Una cadena que parece una fecha sigue siendo texto hasta que se interpreta como tal.
Ajusta las opciones a la estructura del archivo
| Característica del archivo | Opción de lectura |
|---|---|
| Campos separados por punto y coma | sep=";" |
| Comas decimales | decimal="," |
| Sin línea de encabezado | header=None, names=["id", "product"] |
| Dos líneas adicionales antes del encabezado | skiprows=2 |
| Solo se necesitan determinados campos | usecols=["product", "quantity"] |
| Una vista previa breve | nrows=100 |
Para un archivo cuyas líneas son a;b, 1,5;2 y 3,0;4, usa pd.read_csv("file.csv", sep=";", decimal=","). La columna a contiene entonces 1,5 y 3,0. Usar la coma como separador predeterminado produce una columna llamada a;b, una señal de que debes comprobar el delimitador.
index_col="order_id" convierte esa columna en el índice de filas durante la carga. thousands="," lee un campo como "1,200" como 1200; en un archivo separado por comas, el campo debe delimitarse con comillas CSV para que su coma interna no sea otro delimitador.
Conserva el significado al inferir tipos
Los códigos como "001" son identificadores, no cantidades. dtype={"id": str} conserva sus ceros iniciales. Si pandas los convierte primero en 1, convertir ese número de nuevo a texto no permite recuperar cuántos ceros contenía el archivo.
Los campos vacíos y los marcadores habituales como NA, N/A, NULL, NaN y None son valores faltantes por defecto. Añade un marcador especial de un archivo con na_values=["-"]. Estas son reglas de carga, así que comprueba las convenciones del archivo cuando un código parezca un marcador de valor faltante.
Usa parse_dates=["date"] para leer las fechas del ejemplo como fechas y horas. En pandas 3 estas fechas usan resolución de microsegundos, datetime64[us]. UTF-8 es la codificación de texto predeterminada. Un UnicodeDecodeError indica que debes comprobar la codificación del archivo y proporcionar la opción correspondiente, como encoding="latin-1".
Puntos clave
read_csvdevuelve un DataFrame e infiere los tipos de las columnas.- Ajusta
sep,decimaly las opciones de encabezado a la estructura del archivo. - Conserva los ceros iniciales de los identificadores mediante un tipo de datos de texto durante la carga.
- Los campos vacíos y los marcadores habituales se convierten en valores faltantes;
na_valuesañade marcadores. - Las fechas deben interpretarse con
parse_datesdurante la carga o convertirse después. - Una ruta relativa se resuelve a partir del directorio de trabajo actual.
2.2 Inspecciona un DataFrame nuevo
Una lectura correcta significa que pandas pudo interpretar el archivo. No demuestra que las columnas, los tipos y los valores faltantes coincidan con lo que la tabla debe representar. Inspecciona el DataFrame nuevo antes de hacer cálculos con él.
Comprueba las filas visibles y las dimensiones
orders.head(3)
orders.tail()
orders.shape
orders.columns.tolist()
head() muestra cinco filas por defecto; head(3) muestra tres. tail() comprueba el final, donde una exportación puede contener registros distintos. sample(3, random_state=0) da una muestra aleatoria reproducible de tres filas. En un cuaderno interactivo, la expresión final de una celda se muestra automáticamente; en otros entornos, usa print.
El archivo de pedidos debe contener seis filas y seis columnas. Una vista previa debe mostrar columnas con nombre y el primer pedido como datos. Si el primer registro aparece entre los nombres de las columnas, probablemente el archivo no tenga encabezado y necesite header=None. Si todo ocupa una sola columna ancha, comprueba sep.
Los nombres de columnas deben coincidir exactamente, incluidas las mayúsculas, las minúsculas y los espacios. orders["Product"] falla cuando el nombre es product. Inspeccionar la lista facilita la detección de espacios finales. orders.columns = orders.columns.str.strip() elimina los espacios en los extremos de los nombres del encabezado.
Interpreta la estructura con info
orders.info() muestra el rango del índice, el nombre de cada columna, el recuento de valores presentes, el tipo de datos y el uso de memoria. En el ejemplo de seis filas, quantity tiene cinco valores no nulos; las demás columnas tienen seis cada una. Los tipos son dos columnas de coma flotante, una columna entera y tres columnas str. orders.dtypes proporciona una lista compacta de tipos.
Una columna de aspecto numérico con tipo str merece una inspección: un elemento como "unknown", una unidad como "12 kg" o un separador de millares no tratado pueden impedir la inferencia numérica. Las fechas también permanecen como texto salvo que se interpreten. Decide el tipo necesario según el significado de la columna, no solo por su apariencia en una vista previa.
Cuenta valores faltantes y repetidos
orders.isna().sum()
orders.isna().any(axis=1).sum()
orders.nunique()
isna() crea una tabla booleana: True marca una celda faltante. La suma a lo largo de cada columna cuenta esas celdas. Quantity tiene un valor faltante y todas las demás columnas tienen cero. Para contar las filas afectadas, .any(axis=1) comprueba primero si cada fila tiene algún valor faltante y luego .sum() cuenta esas filas. En cambio, sumar todos los recuentos de columnas podría contar una fila varias veces.
nunique() cuenta los valores presentes distintos: los pedidos tienen seis identificadores, cuatro fechas, cinco productos, tres categorías, cuatro cantidades y cinco precios. Compara el recuento de identificadores con el número de filas para comprobar su unicidad, junto con su recuento de valores faltantes. orders.duplicated(subset="product") marca la segunda fila de Notebook, con etiqueta 5, como repetida. Un producto repetido es válido aquí; un identificador de pedido repetido requeriría investigación.
Consulta una vista general numérica rápida
orders.describe() informa del recuento, la media, la desviación estándar, el mínimo, los cuartiles y el máximo de las columnas numéricas. El recuento de quantity es cinco, por lo que su media resume cinco cantidades registradas. Comprueba también los rangos y unidades plausibles, además de los tipos: una columna puede ser numérica y contener aun así un error de entrada. Al revisar una carga nueva, considera conjuntamente el número observado de filas y columnas, los tipos, los recuentos de valores faltantes y la comprobación de identificadores.
Puntos clave
- Usa conjuntamente vistas previas, dimensiones, nombres exactos de columnas y tipos de datos después de la carga.
info()muestra recuentos de valores no nulos y tipos; no devuelve una tabla de resumen.isna().sum()cuenta las celdas faltantes por columna;.any(axis=1).sum()cuenta las filas afectadas.- Comprueba tanto los identificadores faltantes como el número de identificadores distintos.
- Los recuentos de
describe()muestran cuántos valores registrados respaldan un resumen numérico.
2.3 Convierte las columnas a los tipos adecuados
El tipo de datos de una columna determina qué operaciones tienen sentido. Una columna de texto que contiene "12" sigue almacenando texto; no se puede calcular su media como si fuera una columna numérica. Convierte los datos de forma deliberada y asigna el resultado de nuevo a la tabla.
Elige entre conversión estricta y coerción
astype convierte una Series a un tipo indicado, como int, float, str o "Int64". Falla cuando un valor no puede representarse en el tipo solicitado.
raw = pd.Series(["12", "7", "n/a", "3.5"])
numeric = pd.to_numeric(raw, errors="coerce")
raw.astype(float) genera ValueError al llegar a "n/a". Con errors="coerce", los valores de salida son 12,0; 7,0; NaN y 3,5. El elemento que falla pasa a ser un valor faltante en lugar de detener la conversión. Compara raw.isna().sum() con numeric.isna().sum(): se pasó de cero valores faltantes a uno, lo que identifica un valor que necesita revisión.
La coerción es una política de conversión, no una prueba de que cada nuevo valor faltante sea inofensivo. Usa los recuentos anteriores y posteriores para detectar pérdidas. Guarda la conversión en una variable o columna nueva cuando el texto original sea útil para rastrear un valor que falló.
Conserva los números enteros con valores faltantes
La columna quantity de los pedidos contiene números enteros y un NaN, por lo que es float64. El uso habitual de astype(int) falla porque NaN no tiene una representación entera ordinaria.
orders["quantity"] = orders["quantity"].astype("Int64")
La I mayúscula importa: el tipo Int64 que admite valores faltantes conserva el valor ausente como <NA> y almacena los valores conocidos como números enteros. Esta elección es adecuada para recuentos con entradas faltantes. No convierte una cantidad realmente fraccionaria en un recuento entero válido.
Los separadores de millares en el texto también requieren tratamiento. pd.Series(["1,200", "950"]).str.replace(",", "").astype(int) produce 1200 y 950. Cuando el archivo usa esa convención, thousands="," puede gestionarla durante la lectura.
Convierte texto de fechas
orders["date"] = pd.to_datetime(orders["date"])
orders["date"].dt.day_name()
La conversión permite usar .dt.year, .dt.month, .dt.day y .dt.day_name(). Para las seis fechas de los pedidos, los nombres de los días son Monday, Monday, Tuesday, Wednesday, Wednesday y Thursday. Ejecutar pd.to_datetime(orders["date"]) por sí solo produce una Series convertida, pero deja la columna original como texto. La asignación es lo que conserva el resultado.
Almacena categorías repetidas
orders["category"].astype("category") almacena las etiquetas repetidas mediante un conjunto de categorías permitidas. En tablas grandes esto suele ahorrar memoria. Asigna el resultado para conservarlo, igual que con otras conversiones.
El tipo de datos categórico cambia algunas operaciones. Sus categorías no están ordenadas por defecto, por lo que min() y max() generan TypeError. El método value_counts() de una columna categórica también enumera las categorías conocidas ausentes de una selección filtrada con recuento cero. Elegir el tipo categórico es útil para etiquetas repetidas, pero supone un cambio tanto de comportamiento como de almacenamiento.
Puntos clave
astypefalla en conversiones no válidas;to_numeric(errors="coerce")convierte los elementos no válidos en valores faltantes.- Compara los recuentos de valores faltantes antes y después de la coerción.
Int64, que admite valores faltantes, almacena números enteros con entradas faltantes.- Convierte fechas con
to_datetimey lee sus componentes mediante.dt. - Conserva las conversiones asignando sus resultados.
- El tipo categórico no ordenado almacena etiquetas repetidas de forma eficiente, pero cambia algunos resúmenes.
3Selecciona datos por etiqueta y por posición
Una fila puede identificarse por su etiqueta o encontrarse por su posición actual. Aprende a hacer explícita esa elección con loc e iloc, selecciona al mismo tiempo las columnas necesarias y predice si una selección devuelve un valor, una Series o un DataFrame. Los extremos de los segmentos y las etiquetas conservadas explican muchos errores de una posición. Esta distinción resulta especialmente útil después de ordenar o filtrar una tabla.
3.1 Selecciona filas y columnas por etiqueta con loc
Las etiquetas permiten solicitar una fila o columna por su significado. Con loc, un número de pedido identifica una fila incluso si la tabla se ha ordenado. La selección tiene una parte de filas seguida de una parte de columnas: df.loc[rows, columns].
Parte de un índice significativo
El archivo de pedidos tiene seis filas con identificadores del 1001 al 1006. Crea orders_by_id = orders.set_index("order_id"). Sus columnas, en orden, son date, product, category, quantity y unit_price. Las etiquetas de fila son números de pedido, no posiciones de 0 a 5.
orders_by_id.loc[1003]
orders_by_id.loc[1004, "product"]
La primera expresión devuelve el pedido 1003 como una Series: fecha "2026-03-03", producto "Pen set", categoría "Stationery", cantidad 2,0 y precio 4,75. La Series se llama 1003. La segunda devuelve una celda, "Mug".
Una etiqueta ausente genera KeyError. orders_by_id.loc[0] falla: tener una primera fila en la posición 0 no crea una etiqueta 0.
Selecciona colecciones de etiquetas
orders_by_id.loc[[1001, 1005], ["product", "unit_price"]]
Las listas seleccionan etiquetas en el orden solicitado. Esto da dos filas y dos columnas: Notebook a 2,5 y después Backpack a 35,0. Una lista conserva un resultado con forma de tabla incluso cuando contiene una sola etiqueta: .loc[[1003]] es un DataFrame de una fila.
| Solicitud | Forma |
|---|---|
| Un valor | .loc[1004, "product"] |
| Una fila completa | .loc[1004] |
| Una tabla de una fila | .loc[[1004]] |
| Todas las filas, una columna | .loc[:, "unit_price"] |
Dos puntos por sí solos significan todas las etiquetas de ese eje. Omitir el selector de columnas también solicita todas las columnas.
Incluye ambos extremos de un segmento por etiquetas
orders_by_id.loc[1002:1004, "product":"quantity"]
En este índice ordenado, las filas son 1002, 1003 y 1004. El segmento de columnas incluye product, category y quantity. Tanto la etiqueta final de fila como la de columna están incluidas, por lo que la forma es (3, 3). Aplicar aquí la regla habitual de Python que excluye el extremo final omitiría una fila y una columna deseadas.
Las etiquetas sobreviven a la ordenación
Un índice predeterminado puede ocultar la distinción entre etiqueta y posición. Supón que al ordenar puntuaciones se obtienen las etiquetas de fila 3, 0, 2, 1, 4. .loc[0] sigue seleccionando la etiqueta 0, ahora en la segunda fila mostrada. .iloc[0] selecciona la primera fila mostrada, con etiqueta 3. La ordenación mueve cada fila con su etiqueta; no vuelve a numerar el índice sin avisar.
Combina una condición con la selección de columnas
El selector de filas puede ser una Series booleana:
orders.loc[orders["unit_price"] > 5, ["product", "unit_price"]]
Esto conserva Desk lamp a 18,0, Mug a 6,0 y Backpack a 35,0, y devuelve solo las dos columnas solicitadas. La máscara decide qué filas cumplen la condición; la lista de columnas decide qué mostrar. La misma forma de dos ejes puede identificar celdas para actualizarlas colocando la selección en el lado izquierdo de una asignación.
Puntos clave
locselecciona etiquetas de fila y nombres de columna.- Las listas solicitan etiquetas en el orden indicado y conservan el eje en el DataFrame.
- Los segmentos por etiquetas incluyen la etiqueta final; dos puntos seleccionan todas las etiquetas.
- Las etiquetas solicitadas que no existen generan
KeyError. - La ordenación mueve las etiquetas con las filas, por lo que la etiqueta 0 puede diferir de la posición 0.
- Una máscara booleana de filas y nombres de columnas pueden compartir una llamada a
loc.
3.2 Selecciona por posición con iloc y elige el selector adecuado
Usa iloc cuando una solicitud se refiera a dónde se encuentra una fila o columna: las primeras tres filas, la última columna o una celda concreta mostrada. Sus selectores son posiciones enteras, independientes de las etiquetas del índice.
Cuenta desde cero
orders.iloc[0] selecciona la primera fila y orders.iloc[-1] la última. Una posición negativa cuenta hacia atrás desde el final. Dos posiciones seleccionan una celda: orders.iloc[2, 2] es "Pen set" en la tabla de pedidos original, donde product está en la posición de columna 2.
La tabla indexada orders_by_id tiene las columnas date, product, category, quantity y unit_price. Mover order_id al índice cambió las posiciones de sus columnas, por lo que product está ahora en la posición 1. El código basado en posiciones depende de esta estructura.
Detente antes del extremo final del segmento
orders_by_id.iloc[1:3, 0:2]
Las posiciones de fila seleccionadas son 1 y 2, que contienen los pedidos 1002 y 1003. Las posiciones de columna son 0 y 1, date y product. La posición 3 y la columna 2 se excluyen, lo que da la forma (2, 2). Un inicio vacío significa el principio; un final vacío significa el final.
Las listas solicitan posiciones concretas, incluida una mezcla de posiciones positivas y negativas. orders.iloc[[0, -1], [2, 5]] selecciona product y unit_price del primer y el último pedido. Ambos son Notebook a 2,5.
Predice la forma del resultado
| Selección | Resultado |
|---|---|
orders.iloc[0, 2] | Un valor |
orders.iloc[0] | Una Series para una fila |
orders.iloc[:, 2] | Una Series para una columna |
orders.iloc[[0]] | Un DataFrame de una fila |
orders.iloc[0:1, 2:3] | Un DataFrame de una fila y una columna |
Un escalar selecciona un elemento a lo largo de un eje y elimina esa dimensión. Un segmento o una lista conserva ese eje, incluso si selecciona un solo elemento. Esto importa cuando la siguiente operación espera una tabla en lugar de una Series.
Gestiona el final de una tabla
La tabla de pedidos de seis filas tiene posiciones de fila no negativas válidas de 0 a 5. orders.iloc[10] genera IndexError. Un segmento puede extenderse más allá de la tabla: orders.iloc[4:100] simplemente devuelve las dos últimas filas. Una posición individual inexistente es una solicitud de elemento no válida, mientras que un segmento describe un intervalo que se recorta a las filas disponibles.
Elige etiquetas o posiciones de forma deliberada
Para una sola celda, at usa etiquetas e iat usa posiciones. orders.at[2, "product"] y orders.iat[2, 2] dan "Pen set" antes de cambiar el orden de las filas.
Elige loc cuando conozcas un identificador o el significado de una columna. Elige iloc cuando importe la propia ubicación. Para combinar las primeras filas con un nombre de columna, orders.columns.get_loc("quantity") devuelve su posición, 4, lo que permite usar orders.iloc[0:3, 4].
Los corchetes por sí solos pueden cambiar de función: orders["product"] selecciona una columna, pero orders[2:4] selecciona un segmento de filas en las posiciones 2 y 3. Usar loc e iloc explícitamente hace que esa elección sea más fácil de leer.
Puntos clave
ilocusa posiciones enteras que comienzan en cero; las posiciones negativas cuentan desde el final.- Los segmentos por posiciones excluyen el extremo final y pueden extenderse más allá de las filas disponibles.
- Una posición individual fuera de rango genera
IndexError. - Los selectores escalares eliminan una dimensión; las listas y los segmentos la conservan.
atselecciona una celda por etiqueta eiatselecciona una celda por posición.
4Filtra filas mediante condiciones
Las condiciones permiten centrarse en las observaciones que responden a una pregunta. Crea máscaras a partir de comparaciones, combínalas y usa métodos auxiliares para categorías, intervalos, valores faltantes y coincidencias de texto. Después, dirige una actualización a la tabla original con una sola asignación mediante loc. El filtrado y la actualización comparten una condición de filas, pero es esencial tener presente qué tabla recibe un cambio bajo el mecanismo de copia al escribir de pandas 3.
4.1 Filtra con máscaras booleanas
El filtrado selecciona observaciones que responden a una pregunta, como qué pedidos pertenecen a Home y cuestan más de 10 por artículo. Primero crea una máscara booleana, una Series con un True o False por fila. Después úsala para seleccionar las filas coincidentes.
Crea y aplica una máscara
is_stationery = orders["category"] == "Stationery"
stationery = orders[is_stationery]
La máscara es True, False, True, False, False y True. La selección conserva las etiquetas 0, 2 y 5, correspondientes a los pedidos 1001, 1003 y 1006. El filtrado conserva esas etiquetas; no vuelve a numerarlas. reset_index(drop=True) proporciona etiquetas consecutivas si se necesitan.
Los operadores de comparación incluyen ==, !=, <, <=, > y >=. Las comparaciones de texto son exactas: "home" es distinto de "Home", y los espacios también pueden impedir una coincidencia.
Combina condiciones fila por fila
is_home = orders["category"] == "Home"
is_expensive = orders["unit_price"] > 10
orders[is_home & is_expensive]
Solo Desk lamp cumple la condición: su categoría es Home y su precio es 18,0. Mug es de Home, pero cuesta 6,0. Backpack cuesta 35,0, pero pertenece a Bags.
Al escribir comparaciones directamente, coloca cada una entre paréntesis:
orders[(orders["category"] == "Home") &
(orders["unit_price"] > 10)]
Usa & para «y», | para «o» y ~ para «no». Los paréntesis mantienen unida cada comparación antes de que pandas combine las máscaras. Sin ellos, las reglas de precedencia de Python pueden intentar combinar una cadena y una Series con & y generar TypeError.
Los operadores and, or y not de Python esperan un solo valor de verdad, no una columna de valores de verdad. Usarlos con máscaras genera el ValueError de valor de verdad ambiguo. Un simple if orders["quantity"] > 1: tiene el mismo problema. Usa .any() para preguntar si alguna fila coincide, o .all() para preguntar si todas coinciden.
Cuenta coincidencias y proporciones
is_stationery.sum() es 3 porque True cuenta como 1 y False como 0. is_stationery.mean() es 0,5, la fracción de los seis pedidos que cumplen la condición. Multiplica por 100 para expresarla como 50 %.
Trata explícitamente los valores faltantes
Con la columna quantity original de tipo float64, las comparaciones que incluyen NaN dan False salvo !=, que da True. quantity >= 1 conserva cinco filas; quantity < 1 no conserva ninguna. La cantidad vacía no está en ninguna de las dos selecciones. Sin embargo, quantity != 3 incluye esa fila vacía, por lo que «distinto de» no significa «conocido y diferente».
Después de convertir al tipo Int64 que admite valores faltantes, la comparación con <NA> produce <NA>, y el filtrado excluye esas filas. Usa isna() o notna() cuando la pregunta se refiera a valores faltantes.
Para seleccionar columnas además de filas, usa orders.loc[is_home, "product"]. Devuelve Desk lamp y Mug. Una máscara con nombre puede reutilizarse para inspeccionar, contar y actualizar el mismo conjunto de filas.
Puntos clave
- Una comparación crea un resultado booleano por fila; el filtrado conserva las filas True y sus etiquetas.
- Combina máscaras con
&,|y~, con paréntesis alrededor de las comparaciones. - Usa
.any()o.all()cuando se necesite un solo valor de verdad. - La suma de una máscara booleana cuenta las coincidencias y su media da la proporción correspondiente.
- Comprueba los valores faltantes explícitamente: NaN de coma flotante y
<NA>se comportan de forma distinta en las comparaciones. - La igualdad de texto distingue entre mayúsculas y minúsculas e incluye los espacios.
4.2 Utiliza métodos auxiliares y query para filtros habituales
Algunos filtros tienen formas habituales: pertenencia a una lista, un intervalo numérico, un valor faltante o un fragmento de texto. Los métodos auxiliares expresan estas pruebas directamente y siguen produciendo máscaras que pueden combinarse con otras condiciones.
Comprueba pertenencia e intervalos
orders[orders["category"].isin(["Home", "Bags"])]
orders[orders["unit_price"].between(4.75, 18)]
isin encuentra coincidencias con cualquiera de los valores enumerados. La primera selección contiene los pedidos 1002, 1004 y 1005. ~orders["category"].isin(["Home"]) invierte la pertenencia y conserva las filas de Stationery y Bags. Una expresión in de Python no crea esta máscara de pertenencia fila por fila.
between incluye ambos extremos por defecto. La segunda selección incluye Desk lamp a 18,0, Pen set a 4,75 y Mug a 6,0. Usa inclusive="neither" para excluir ambos extremos, "left" para incluir solo el extremo inferior o "right" para incluir solo el superior. Elige la regla de los extremos según la pregunta planteada.
Encuentra entradas faltantes y presentes
orders[orders["quantity"].isna()] conserva el pedido 1006. notna() hace lo contrario y conserva las cantidades registradas. No compruebes la igualdad con np.nan: NaN es distinto incluso de sí mismo, por lo que quantity == np.nan no encuentra la fila faltante.
Busca dentro del texto
orders[orders["product"].str.contains("note", case=False, na=False)]
str.contains comprueba si cada valor de texto contiene una coincidencia. Ignorar mayúsculas y minúsculas permite encontrar ambas filas de Notebook. na=False hace que el texto faltante cuente como ausencia de coincidencia. Por defecto, la búsqueda trata el patrón como una expresión regular; para un fragmento literal de texto con puntuación, regex=False evita interpretar esa puntuación como un patrón. str.startswith y str.endswith comprueban el principio y el final.
Escribe un filtro como consulta
orders.query("quantity >= 2 and unit_price < 5")
Esto conserva los pedidos 1001 y 1003. Dentro de una cadena de query, los nombres de columna representan columnas y se permiten and, or y not. La cadena es una expresión de consulta de pandas; no tiene la misma sintaxis que combinar Series directamente en Python normal.
Una variable de Python necesita @:
limit = 5
orders.query("unit_price > @limit")
El resultado contiene Desk lamp, Mug y Backpack. Un nombre de columna que contiene un espacio necesita acentos graves dentro de la consulta, como en orders.query("`unit price` > 5").
La misma pregunta puede escribirse como una máscara, una llamada a un método auxiliar o una consulta. Prefiere la forma que muestre claramente la regla. Para un intervalo, between reúne los límites y la regla de inclusión. Para un conjunto de etiquetas permitidas, isin evita repetir pruebas de igualdad. Cuando un filtro se comporte de forma inesperada, inspecciona la máscara y los valores exactos de la columna antes de cambiar la condición.
Puntos clave
isincomprueba la pertenencia y~invierte la máscara.betweenincluye ambos extremos salvo queinclusivecambie la regla.isnaynotnadetectan valores faltantes y registrados.str.containsbusca texto;case=Falseignora mayúsculas y minúsculas yna=Falseexcluye el texto faltante.- Dentro de
query, las columnas se nombran directamente, las variables de Python usan@y los nombres de columna con espacios usan acentos graves.
4.3 Modifica de forma segura los valores de las filas seleccionadas
Una actualización debe dirigirse a la tabla que quieres cambiar. En pandas 3, una selección se comporta como un objeto separado bajo el mecanismo de copia al escribir, por lo que cambiar un objeto seleccionado no cambia su tabla de origen.
Coloca todo el destino en una asignación con loc
sale = orders.copy()
is_home = sale["category"] == "Home"
sale.loc[is_home, "unit_price"] *= 0.9
La máscara selecciona dos filas de Home. El selector de columna apunta a sus precios. La multiplicación por 0,9 conserva el 90 % de cada precio y reduce 18,00 a 16,20 y 6,00 a 5,40. Las demás filas no cambian. La forma desarrollada lee la misma selección en el lado derecho y asigna los valores multiplicados en el izquierdo.
Aquí sale es una tabla separada que se usa para cambiar precios, mientras que orders queda disponible para comparar. Para actualizar la tabla original, coloca orders.loc[...] en el lado izquierdo de la asignación.
Evita la asignación encadenada
orders[orders["category"] == "Home"]["unit_price"] = 0
Esto usa dos pasos de indexación. El primero produce un objeto seleccionado; el segundo asigna valores a ese objeto. En pandas 3 nunca actualiza orders, y una advertencia ChainedAssignmentError señala el problema. El mismo problema afecta a orders["unit_price"][1] = 0.
Usa orders.loc[orders["category"] == "Home", "unit_price"] = 0 cuando el cambio deseado sea en la tabla original. La tabla, las filas coincidentes y la columna se especifican en una sola asignación.
Comprende las tablas seleccionadas
Después de home = orders[orders["category"] == "Home"], cambiar home["unit_price"] solo cambia home. Los cambios posteriores en orders tampoco cambian home. Los objetos pueden compartir almacenamiento internamente hasta que sea necesario escribir, pero sus valores visibles se comportan de forma independiente.
Los ejemplos antiguos de pandas pueden mostrar SettingWithCopyWarning y usar .copy() después de la selección para evitar actualizaciones inciertas. pandas 3 eliminó esa advertencia y hace que la independencia de las selecciones sea consistente. Un .copy() explícito sigue siendo útil para expresar la intención, pero una selección ya se comporta de forma independiente ante las actualizaciones.
Empareja los valores del lado derecho con el destino
Un escalar rellena todas las celdas seleccionadas. Una lista necesita exactamente un valor por fila seleccionada y las rellena en el orden de selección. Una Series se alinea por etiqueta de índice:
new_prices = pd.Series([16.2, 5.4], index=[1, 3])
sale.loc[is_home, "unit_price"] = new_prices
Las filas de Home tienen las etiquetas 1 y 3, por lo que reciben 16,2 y 5,4. Si una etiqueta seleccionada faltara en la Series, su valor asignado sería NaN; las filas fuera de la selección permanecerían sin cambios. Que las longitudes sean iguales no garantiza por sí solo que los valores de la Series se emparejen con las filas.
Inspecciona sale.loc[is_home, "unit_price"] después del cambio y compáralo con orders.loc[is_home, "unit_price"]. El valor de .sum() de la máscara es 2, que es el número esperado de filas afectadas por este descuento.
Puntos clave
- Actualiza la tabla deseada mediante una sola asignación
loc[mask, column]. - En pandas 3, la asignación encadenada nunca actualiza la tabla original.
- Las selecciones se comportan de forma independiente bajo el mecanismo de copia al escribir.
- Un escalar rellena la selección; una lista sigue el orden; una Series se alinea por etiqueta.
5Añade y transforma columnas
Las columnas derivadas expresan relaciones ya presentes en una tabla: la cantidad y el precio se convierten en ingresos, mientras que una condición se convierte en una etiqueta de categoría. Usa aritmética vectorizada y pequeñas transformaciones para expresar estas reglas con claridad. También elegirás entre aplicar una correspondencia a todos los valores o sustituir unos pocos, conservarás los resultados mediante asignación y tendrás en cuenta las entradas faltantes y la alineación por etiquetas cuando entren nuevos valores en una tabla.
5.1 Calcula columnas nuevas a partir de las existentes
Las columnas nuevas convierten los datos registrados en cantidades que puedes analizar. Un cálculo entre columnas funciona fila por fila, mientras que el índice mantiene cada resultado asociado a su observación.
Calcula los ingresos
orders["revenue"] = orders["quantity"] * orders["unit_price"]
Los seis ingresos son 7,5; 18,0; 9,5; 24,0; 35,0 y NaN. Para la primera fila, tres artículos a 2,50 cada uno dan 7,50. La última fila tiene una cantidad desconocida, por lo que sus ingresos también son desconocidos. Asignar a un nombre nuevo añade una columna a la derecha; asignar a un nombre existente sobrescribe esa columna.
La aritmética entre columnas es vectorizada. Expresa una regla para toda la columna y evita un bucle de Python sobre las filas. En tablas grandes es mucho más rápida que for o iterrows, y la expresión muestra claramente la relación entre las entradas.
Usa los valores registrados en un total
orders["revenue"].sum() omite NaN y da 94,0, el total de los cinco ingresos conocidos. .mean() da 18,8 porque el denominador es el número de ingresos registrados, cinco. Dividir 94,0 entre las seis filas trataría el ingreso faltante como si aportara un cero conocido, sin indicarlo.
Para calcular las participaciones porcentuales:
orders["share_pct"] = (
orders["revenue"] / orders["revenue"].sum() * 100
).round(1)
Las participaciones son 8,0; 19,1; 10,1; 25,5; 37,2 y NaN. Son participaciones del total conocido. La entrada faltante sigue siendo faltante en las operaciones aritméticas.
Devuelve una tabla con assign
assign devuelve un DataFrame nuevo con columnas añadidas o sustituidas, y deja su entrada sin cambios. Funciona de forma natural dentro de una cadena:
with_tax = orders.assign(
tax=lambda d: (d["revenue"] * 0.2).round(2)
)
La expresión lambda lee la tabla en ese punto de la cadena. Da valores de impuesto de 1,5; 3,6; 1,9; 4,8; 7,0 y NaN. En pandas 3, pd.col("revenue") * 0.2 es otra forma de referirse a una columna en assign.
Los cálculos decimales pueden mostrar pequeños errores binarios de coma flotante: 9,5 multiplicado por 0,2 puede almacenarse como 1.9000000000000001. .round(2) da un valor útil para la presentación. Evita las pruebas de igualdad exacta sobre decimales calculados cuando sean posibles pequeños errores de representación.
Comprende cómo empareja filas la asignación
orders["home_price"] = orders.loc[
orders["category"] == "Home", "unit_price"
]
La Series asignada tiene las etiquetas 1 y 3. Esas filas reciben 18,0 y 6,0; todas las demás reciben NaN. La asignación de una Series empareja etiquetas, incluso cuando su longitud difiere de la de la tabla. Una lista normal no tiene etiquetas y debe contener exactamente un valor por fila. Un escalar, como orders["currency"] = "EUR", rellena todas las filas.
Deriva valores de texto o fechas
Los accesores .str y .dt también proporcionan operaciones vectorizadas sobre columnas. orders["product"].str.upper() produce nombres en mayúsculas y .str.len() da las longitudes 8, 9, 7, 3, 8 y 8. Asigna estos resultados a una columna nueva cuando sean útiles tanto los valores originales como los derivados.
Puntos clave
- Asignar una expresión de columnas almacena un resultado por fila.
- Las entradas desconocidas suelen producir resultados aritméticos desconocidos; los resúmenes omiten los valores faltantes por defecto.
- Las operaciones vectorizadas sobre columnas evitan los bucles sobre filas.
assigndevuelve un DataFrame nuevo y puede referirse a columnas mediante una expresión lambda.- La asignación de una Series empareja etiquetas; la asignación de una lista sigue el orden y la longitud de las filas.
- Usa
.stry.dtpara columnas derivadas de texto y fechas.
5.2 Recodifica y transforma valores con np.where, map y apply
Transformar una columna puede significar aplicar una regla numérica, asignar una etiqueta o traducir etiquetas existentes. Elige un método cuyo comportamiento coincida con la regla, especialmente para los valores que la regla no menciona.
Convierte una condición en etiquetas
orders["price_band"] = np.where(
orders["unit_price"] >= 5, "high", "low"
)
np.where elige su segundo argumento cuando la condición es True y el tercero cuando es False. Para los precios 2,50; 18,00; 4,75; 6,00; 35,00 y 2,50, las etiquetas son low, high, low, high, high y low. El operador >= incluye un precio exactamente igual a 5.
Traduce todos los valores o cambia unos pocos
codes = {"Stationery": "ST", "Home": "HM", "Bags": "BG"}
orders["category_code"] = orders["category"].map(codes)
map con un diccionario da ST, HM, ST, HM, BG y ST. Un valor ausente del diccionario se convierte en NaN. Con solo {"Stationery": "ST"}, tanto Home como Bags pasan a ser valores faltantes. Usa una correspondencia completa cuando cada categoría necesite un código traducido.
replace cambia los valores enumerados y deja los no enumerados sin cambios. orders["category"].replace({"Bags": "Luggage"}) conserva Stationery y Home mientras cambia el nombre de Bags.
| Cambio deseado | Método adecuado |
|---|---|
| Dar un código a cada categoría conocida | map con un diccionario |
| Cambiar el nombre de unas pocas etiquetas existentes | replace |
| Elegir entre dos resultados a partir de una condición | np.where |
Aplica una función personalizada
Una Series puede pasar cada valor a una función mediante map o apply. orders["product"].apply(len) devuelve la longitud de cada nombre de producto. Pasa len en sí; len() la llamaría de inmediato sin un valor.
Una expresión lambda puede expresar una pequeña regla para valores: orders["unit_price"].apply(lambda p: "budget" if p < 5 else "standard"). Esto devuelve budget, standard, budget, standard, standard y budget.
Para una lógica que necesita varias celdas de una fila, apply de DataFrame acepta axis=1:
orders.apply(
lambda r: r["quantity"] * r["unit_price"], axis=1
)
La función lee la cantidad y el precio de cada fila. Para esta operación aritmética, la multiplicación directa de columnas es más clara y mucho más rápida en una tabla grande. Usa expresiones vectorizadas o np.where cuando puedan expresar el cálculo; reserva las funciones por filas para la lógica que las necesite.
Usa transformaciones numéricas incorporadas
round(n) redondea a n cifras decimales, abs() da valores absolutos y clip(lower=..., upper=...) restringe los valores a unos límites. orders["unit_price"].clip(upper=20) cambia 35,0 a 20,0 y deja los otros cinco precios sin cambios. No elimina la fila cara.
Estas transformaciones devuelven valores nuevos. Asígnalos a una columna nueva para conservar la entrada y poder comprobarla, o sobrescribe la original cuando esa sea la intención. Inspecciona unas filas transformadas o ejecuta value_counts() para comprobar que las nuevas etiquetas y sus recuentos se ajustan a la regla.
Puntos clave
np.whereselecciona un resultado para el caso verdadero o falso de cada valor de la condición.mapcon un diccionario convierte los valores no enumerados en faltantes;replacelos conserva.- Pasa la función en sí a
apply; usaaxis=1para una función sobre filas de un DataFrame. - Prefiere las operaciones vectorizadas cuando expresen la regla.
cliplimita los valores, mientras queroundyabslos transforman sin seleccionar filas.
6Ordena datos, asigna rangos y resume los resultados
Una tabla ordenada y un resumen estadístico compacto responden a preguntas distintas sobre las mismas observaciones. Ordena registros, asigna rangos con una regla deliberada para los empates y elige recuentos, medidas de tendencia central o de dispersión que se ajusten a los datos. Después examina las proporciones de categorías y las relaciones numéricas. Los valores faltantes, la dirección de la clasificación, los denominadores muestrales y los límites de la correlación afectan a la interpretación de un resultado.
6.1 Ordena filas por sus valores o por el índice
La ordenación cambia el orden en que aparecen las observaciones. Mantiene juntos los valores de cada fila y desplaza con ella su etiqueta. Decide qué tiene prioridad y cómo deben ordenarse los valores empatados antes de seleccionar los mayores o menores.
Ordena una columna
scores = pd.DataFrame({
"name": ["Ana", "Ben", "Chen", "Dara", "Eli"],
"points": [88, 92, 88, 75, 92]
})
ordered = scores.sort_values("points")
Por defecto, el menor aparece primero. El 75 de Dara es el primero, seguido de los dos 88 y después de los dos 92. Las etiquetas de fila se desplazan con los registros. Entre los empates, el algoritmo de ordenación predeterminado no garantiza el orden original; las etiquetas mostradas pueden ser 3, 0, 2, 1, 4, pero no debe suponerse que las filas empatadas conserven ese orden.
Usa ascending=False para colocar el mayor primero. sort_values devuelve una tabla y deja scores sin cambios salvo que se asigne el resultado.
Elige cómo resolver los empates
scores.sort_values(
["points", "name"], ascending=[False, True]
)
La primera clave tiene prioridad. Las puntuaciones disminuyen y los nombres aumentan dentro de las puntuaciones iguales. El orden es Ben, Eli, Ana, Chen y Dara. Ordenar primero los nombres respondería a una pregunta distinta porque convertiría los nombres en la clave principal.
Cuando los empates en una sola columna deban conservar el orden de entrada, usa scores.sort_values("points", kind="stable"). La estabilidad mantiene las filas empatadas en su secuencia existente. En cambio, una clave secundaria da a los empates su propia regla de ordenación explícita.
Ubica los valores faltantes y ordena el texto
Los valores faltantes van al final por defecto tanto en la ordenación ascendente como en la descendente. pd.Series([3.0, np.nan, 1.0]).sort_values() da 1,0; 3,0 y después NaN. na_position="first" mueve la entrada faltante al principio; invertir solo la dirección de ordenación no lo hace.
La ordenación de texto sigue los códigos de caracteres. "Zebra" se ordena antes que "apple" porque las letras mayúsculas y minúsculas ocupan intervalos distintos. Los nombres escritos de forma consistente, como Bags, Home y Stationery, se ordenan alfabéticamente como se espera.
Ordena etiquetas o vuelve a numerarlas
sort_index() ordena las etiquetas de fila, no los valores de los datos. Después de ordenar por puntuación, puede restablecer el orden de las etiquetas predeterminadas originales. sort_index(ascending=False) invierte el orden de las etiquetas. En cambio, reset_index(drop=True) mantiene el orden actual de las filas y sustituye sus etiquetas por 0, 1, 2 y así sucesivamente.
Selecciona las filas con valores mayores o menores
scores.nlargest(2, "points") devuelve Ben y Eli, ambos con 92. nsmallest toma los valores bajos. Si el corte se produce dentro de un empate, decide si quieres conservar todas las filas empatadas. scores.nlargest(1, "points", keep="all") devuelve ambos valores 92, aunque n sea 1. En ese caso, el número solicitado es un límite de corte, no una garantía del número final de filas.
Puntos clave
sort_valuesordena las filas por los valores de los datos;sort_indexordena las etiquetas de fila.ascending=Falsecoloca primero los valores grandes, mientras que los valores faltantes siguen yendo al final por defecto.- Varias claves de ordenación se aplican por orden de prioridad y pueden usar distintas direcciones.
- Usa una clave secundaria o una ordenación estable de una columna cuando importe el orden de los empates.
reset_index(drop=True)vuelve a numerar el orden actual sin volver a ordenarlo.keep="all"en una selección de valores mayores puede devolver más de n filas.
6.2 Asigna rangos a los valores y resuelve los empates
Un rango registra el lugar que corresponde a un valor en el orden de clasificación sin mover su fila. Es útil cuando cada observación necesita un número de puesto junto a sus datos originales. Los empates necesitan una regla porque varios valores pueden ocupar la misma parte de ese orden.
Elige la dirección
scores["points"].rank() asigna rangos de menor a mayor. Usa ascending=False para una tabla de resultados en la que las puntuaciones altas deban recibir los mejores rangos. El método para resolver empates decide entonces qué número de puesto recibe cada grupo empatado.
Las puntuaciones del ejemplo en el orden de las filas son Ana 88, Ben 92, Chen 88, Dara 75 y Eli 92. En orden descendente, los valores 92 ocupan los puestos 1 y 2, los valores 88 los puestos 3 y 4, y 75 el puesto 5. El valor predeterminado method="average" asigna a cada valor empatado la media de sus puestos ocupados. Los valores devueltos, en el orden original de las filas, son 3,5; 1,5; 3,5; 5,0 y 1,5.
Elige un método para resolver empates
| Método | Rangos descendentes en el orden original de las filas | Regla de empate |
|---|---|---|
average | 3,5; 1,5; 3,5; 5,0; 1,5 | Media de los rangos ocupados |
min | 3, 1, 3, 5, 1 | Menor rango ocupado |
max | 4, 2, 4, 5, 2 | Mayor rango ocupado |
dense | 2, 1, 2, 3, 1 | Un rango por valor distinto, sin huecos |
first | 3, 1, 4, 5, 2 | Rangos separados por orden de aparición |
Con min, dos ganadores en el rango 1 hacen que la siguiente puntuación empiece en el rango 3. Con dense, la siguiente puntuación distinta empieza en el rango 2. first resuelve un empate incluso cuando las propias puntuaciones no dan motivo para preferir a una persona; sigue el orden de entrada.
Los resultados de los rangos son números de coma flotante, lo que permite valores como 1,5. Cuando el método elegido produce rangos enteros y no falta ninguno, .astype(int) los convierte para mostrarlos. Un tipo entero ordinario no puede contener un rango faltante.
Expresa los rangos como fracciones
Para el método predeterminado de la media y valores presentes, rank(pct=True) divide cada rango entre el número de valores clasificados. Clasificar las cinco puntuaciones del ejemplo de forma ascendente da 2,5; 4,5; 2,5; 1,0 y 4,5. Dividir entre cinco da 0,5; 0,9; 0,5; 0,2 y 0,9.
Los valores más altos empatados reciben 0,9, no 1, porque su rango medio es 4,5. Un rango percentil describe el rango relativo a los valores clasificados; no es un porcentaje de la propia puntuación.
Gestiona los rangos faltantes y guarda los resultados
Los valores faltantes conservan rangos NaN por defecto. Con los ingresos 7,5; 18,0; 9,5; 24,0; 35,0 y NaN, los rangos descendentes son 5, 3, 4, 2, 1 y NaN. na_option="bottom" coloca la entrada faltante después de los valores registrados y le da el rango 6.
scores["place"] = scores["points"].rank(
method="min", ascending=False
)
Las filas siguen siendo Ana, Ben, Chen, Dara y Eli. La nueva columna place registra 3, 1, 3, 5 y 1. Ordena por separado si la presentación debe mostrar primero a los ganadores.
Puntos clave
- La asignación de rangos establece puestos sin mover las filas; la clasificación descendente da números de rango bajos a los valores grandes.
- Los métodos para resolver empates controlan si los rangos compartidos dejan huecos o siguen el orden de entrada.
- El método predeterminado de la media puede devolver rangos fraccionarios.
- Con la asignación predeterminada de rangos mediante la media,
pct=Truedivide entre el número de valores clasificados. - Los valores faltantes conservan rangos faltantes por defecto;
na_option="bottom"los coloca al final.
6.3 Resume columnas mediante estadísticos descriptivos
Un estadístico descriptivo condensa muchas observaciones en una cantidad útil. Elige un estadístico que se ajuste a la pregunta y consulta su recuento de valores presentes para saber cuántos datos lo respaldan.
Calcula medidas de tendencia central y dispersión
weather = pd.DataFrame({
"temp_c": [14.0, 17.5, 16.0, 21.0, 19.5, 12.5, 15.0],
"rain_mm": [0.0, 2.4, 0.0, 0.0, 5.1, 12.3, 0.8]
}, index=["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])
Para weather["temp_c"], sum() es 115,5, mean() es 16,5 y median() es 16,0. El mínimo es 12,5 y el máximo 21,0, lo que da un rango de 8,5 °C. idxmax() devuelve la etiqueta "Thu", mientras que idxmin() devuelve "Sat": identifican observaciones en lugar de devolver los propios valores extremos.
std() y var() miden la dispersión. pandas usa el denominador muestral por defecto, ddof=1, y divide las desviaciones al cuadrado entre uno menos que el recuento. Aquí la desviación estándar es aproximadamente 3,028 °C y la varianza aproximadamente 9,167 grados Celsius cuadrados. std(ddof=0) usa el propio recuento y da aproximadamente 2,803 °C. np.std de NumPy usa ddof=0 por defecto, así que iguala la configuración antes de comparar resultados.
Interpreta los cuartiles y describe
quantile(0.25) da el cuartil inferior, 14,5; quantile(0.5) da la mediana, 16,0; quantile(0.75) da el cuartil superior, 18,5. La interpolación predeterminada puede devolver un valor entre mediciones registradas.
weather.describe() combina el recuento, la media, la desviación estándar, el mínimo, los tres cuartiles y el máximo para las columnas numéricas. La lluvia tiene una media de aproximadamente 2,94 mm y una mediana de 0,8 mm. La medición de 12,3 mm eleva la media; la mediana describe mejor un día típico en esta semana con asimetría a la derecha.
Ten en cuenta los valores faltantes y los tipos
Para pd.Series([1, np.nan, 3]), .mean() es 2,0 porque los valores faltantes se omiten por defecto. .count() es 2, mientras que .size es 3. Con skipna=False, la media es NaN. No uses el número total de filas como denominador de la media predeterminada cuando falten algunas entradas.
Los resúmenes de texto son distintos. orders["category"].describe() da count 6, unique 3, top Stationery y freq 3. Calcular la media de la tabla de pedidos que mezcla texto genera TypeError; usa orders.mean(numeric_only=True) o selecciona columnas numéricas con select_dtypes("number").
Resume a lo largo de un eje
Por defecto, los estadísticos de DataFrame reducen a lo largo de las filas hasta obtener un resultado por columna. En cambio, axis=1 da un resultado por fila; selecciona cantidades cuyas unidades puedan combinarse con sentido.
orders[["quantity", "unit_price"]].agg(["mean", "max"])
agg calcula conjuntamente varios estadísticos nombrados. Quantity tiene una media de 2,2 y un máximo de 4,0; unit_price tiene una media de aproximadamente 11,46 y un máximo de 35,0. weather["rain_mm"].cumsum() da las sumas acumuladas 0,0; 2,4; 2,4; 2,4; 7,5; 19,8 y 20,6 mm, conservando un resultado por día.
Puntos clave
- Elige totales, medidas de tendencia central o medidas de dispersión según la pregunta.
describereúne estadísticos numéricos habituales; las columnas de texto tienen resúmenes basados en frecuencias.countexcluye los valores faltantes, mientras quesizelos incluye.- La desviación estándar de pandas usa
ddof=1; NumPy usaddof=0por defecto. - Los cuantiles pueden interpolar entre mediciones.
idxmaxeidxmindevuelven etiquetas;cumsumdevuelve sumas acumuladas.aggsolicita varios estadísticos yaxiscontrola la dirección de la reducción.
6.4 Cuenta valores y mide relaciones
Los recuentos describen con qué frecuencia aparecen los valores; las correlaciones describen cómo varían conjuntamente dos variables numéricas. Ambos resúmenes necesitan interpretación: qué se cuenta, qué falta y qué relación mide el estadístico.
Cuenta categorías o enumera valores distintos
orders["category"].value_counts() da Stationery 3, Home 2 y Bags 1, ordenados por frecuencia. La Series devuelta se llama count. Las entradas faltantes se excluyen por defecto; dropna=False las incluye como un recuento separado.
orders["category"].value_counts(normalize=True)
La Series normalizada se llama proportion: Stationery es 0,5, Home aproximadamente 0,333 y Bags aproximadamente 0,167. Multiplicar por 100 expresa porcentajes. Con la regla predeterminada para valores faltantes, estas proporciones describen los valores presentes.
| Pregunta | Método |
|---|---|
| ¿Con qué frecuencia aparece cada valor? | value_counts() |
| ¿Qué valores distintos aparecen? | unique() |
| ¿Cuántos valores presentes distintos aparecen? | nunique() |
| ¿Qué valor o valores aparecen con más frecuencia? | mode() |
unique() conserva el orden de primera aparición: Stationery, Home, Bags. mode() devuelve una Series porque varios valores pueden empatar en la frecuencia más alta. No solicita un único ganador elegido arbitrariamente.
Las condiciones pueden contarse directamente. (weather["rain_mm"] > 0).sum() cuenta cuatro días lluviosos. Su .mean() es aproximadamente 0,571, por lo que llovió aproximadamente el 57 % de los siete días.
Mide una relación lineal
weather["temp_c"].corr(weather["rain_mm"]) da una correlación de Pearson de aproximadamente −0,397. Su signo negativo indica que los días más cálidos tendieron a tener menos lluvia en estas observaciones. Su magnitud describe qué tan bien se ajusta un patrón lineal, en una escala de −1 a 1 que pasa por 0.
Un valor de 1 significa una relación lineal creciente perfecta; −1 significa una decreciente perfecta. Un valor cercano a cero indica poca asociación lineal. Una relación curva puede seguir siendo fuerte incluso cuando la correlación de Pearson está cerca de cero. La correlación también se refiere a la asociación, no demuestra que cambiar una variable cause el cambio de la otra.
Interpreta una matriz de correlaciones
weather.corr() muestra todos los pares numéricos juntos. La matriz es simétrica: la temperatura con la lluvia tiene la misma correlación que la lluvia con la temperatura. Una columna numérica con variación tiene correlación 1 consigo misma; una columna constante no tiene una correlación definida y da NaN.
Para relaciones que crecen o decrecen de forma consistente sin seguir una línea recta, method="spearman" calcula la correlación a partir de los rangos. El método cambia qué tipo de patrón se resume, así que indícalo al comunicar un resultado.
El cálculo meteorológico usa solo siete mediciones. Describe esta pequeña semana observada; las afirmaciones firmes sobre un patrón climático más amplio necesitan más evidencia. Un informe útil incluye las variables, el signo y el tamaño del coeficiente, el método y el número de observaciones.
Puntos clave
value_countsinforma de las frecuencias; la normalización informa de las proporciones de los valores contados.unique,nuniqueymoderesponden a preguntas distintas sobre valores diferentes y frecuentes.- La suma de una condición cuenta las coincidencias y su media da una proporción.
- La correlación de Pearson mide la asociación lineal de −1 a 1.
- Una matriz de correlaciones es simétrica; las columnas constantes dan correlaciones no definidas.
- La correlación de Spearman opera sobre rangos y la correlación por sí sola no establece una causa.
Ejemplos de Series y DataFrames de pandas
1Crea una tabla con etiquetas significativas
12 pasos
- 1IntroducciónMantén los valores asociados a su significado
Una lista proporciona valores en un orden. pandas añade etiquetas para que puedas identificar qué describe cada valor, incluso después de que las filas se desplacen. Empieza con una variable etiquetada y después combina varias variables en una tabla.
La pregunta clave es si una operación sigue la identidad de una fila o su posición actual. Esa distinción explica tanto la aritmética de Series como la elección de un índice útil para una tabla.
- 2EjemploCrea una Series etiquetada de lluvia
Crea tres mediciones de lluvia en milímetros:
rain = pd.Series([4.5, 3.0, 6.2], index=["Mon", "Tue", "Wed"], name="rain_mm")Los valores y las etiquetas se emparejan en orden.
rain["Tue"]da 3,0, mientras querain.iloc[0]da 4,5. La primera solicitud nombra un día; la segunda indica una posición..dtypeesfloat64y.sizees 3. - 3ExplicaciónAplica una regla a todos los valores
Una Series admite operaciones vectorizadas:
rain * 2duplica cada medición y conserva las etiquetas de día.rain > 4produce True, False y True, de nuevo etiquetados por día.Usa atributos como
.index,.namey.dtypesin paréntesis. Cuando necesites los valores como un arreglo de NumPy, llama a.to_numpy();.valuespuede devolver un arreglo de pandas para algunos tipos de datos. - 4EjemploSuma por etiqueta, no por fila mostrada
Sea a una Series que contiene x 1, y 2 y z 3, mientras que b contiene y 10, z 20 y w 30. En
a + b, y se empareja con y y da 12,0, y z se empareja con z y da 23,0.Las etiquetas x y w no tienen pareja, por lo que sus resultados son NaN. En cambio,
a.add(b, fill_value=0)da x 1,0 y w 30,0. Una posición de fila compartida no empareja entradas con etiquetas distintas. - 5DesafíoPredice una suma alineada
Una Series tiene las etiquetas a y b con valores 4 y 7. Otra tiene las etiquetas b y c con valores 3 y 9. ¿Cuáles son los resultados no faltantes de la suma ordinaria?
---reveal---
Solo b está presente en ambas entradas. Su suma es 7 más 3, que da 10,0. Las etiquetas a y c tienen resultados faltantes. Sumar el primer elemento con el primero emparejaría incorrectamente a con b.
- 6EjemploCrea columnas para varias variables
Crea una pequeña tabla de pedidos:
df = pd.DataFrame({"product": ["Notebook", "Mug"], "quantity": [3, 4], "unit_price": [2.5, 6.0]})Cada lista proporciona una columna y debe tener un valor por fila. Las columnas comparten las etiquetas de índice 0 y 1, pero conservan sus propios tipos de datos.
.shapees(2, 3), mientras que.sizees 6 porque cuenta todas las celdas. - 7Idea claveConserva la forma que necesita el siguiente paso
df["quantity"]devuelve una Series.df[["quantity"]]devuelve un DataFrame de una columna porque la lista interior solicita una colección de columnas.Esta es una diferencia de estructura, aunque los valores visibles coincidan. Los corchetes también evitan conflictos de nombres: una columna llamada size necesita
df["size"], ya quedf.sizesignifica el número de celdas del DataFrame. - 8DesafíoElige la dirección de un total
Para las columnas a
[1, 2]y b[3, 4], ¿qué devuelve una suma por filas y qué eje la solicita?---reveal---
Usa
df.sum(axis=1). La primera fila da 1 más 3, es decir, 4; la segunda da 2 más 4, es decir, 6. El eje predeterminado opera a lo largo de las filas y daría, en cambio, los totales de columna a 3 y b 7. - 9EjemploUsa el identificador de pedido como índice
Para una tabla con una columna order_id, guarda
by_id = orders.set_index("order_id"). Los números de pedido pasan al índice de filas y salen de las columnas ordinarias.Una búsqueda como
by_id.loc[1004]identifica ahora un pedido en lugar de su ubicación actual. Compruebaby_id.index.is_uniqueantes de confiar en que cada número identifique exactamente una fila; pandas permite etiquetas duplicadas. - 10ConsejoGuarda un cambio de etiquetas
rename,drop,set_indexyreset_indexdevuelven tablas nuevas. Conserva el resultado mediante una asignación, comoorders = orders.rename(columns={"unit_price": "price"}).Si omites la asignación, la tabla antigua permanece. Un nombre de columna antiguo mal escrito en rename se ignora por defecto, así que inspecciona
.columnscuando falte el nuevo nombre esperado. - 11DesafíoRecupera los identificadores sin perderlos
Una tabla usa identificadores de pedido como índice. Necesitas un índice de filas predeterminado y seguir conservando los identificadores como datos. ¿Qué operación debes guardar?
---reveal---
Guarda
df = df.reset_index(). Esto conserva el índice anterior como una columna y proporciona las etiquetas 0, 1, 2 y así sucesivamente. Usardrop=Truedescartaría esos identificadores. El orden de las filas permanece igual. - 12RepasoPredice la identidad, el tipo y la forma
Antes de interpretar un resultado, comprueba tres cosas: qué etiquetas identifican sus valores, qué tipo de datos los almacena y cuántos ejes conserva la selección.
La aritmética de Series sigue las etiquetas. Un DataFrame organiza las variables en columnas con tipos de datos. Los cambios de índice permiten que un identificador significativo sirva para búsquedas posteriores, siempre que se guarde la tabla devuelta y sus etiquetas identifiquen las filas de forma única.
2Carga un CSV y comprueba su significado
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónTrata la carga como un paso comprobable
- 2ExplicaciónLee registros en una tabla
- 3EjemploAjusta los separadores y las marcas decimales
- 4ConsejoConserva los códigos durante la lectura
- 5DesafíoConserva el primer registro
- 6EjemploComprueba la estructura visible
- 7ExplicaciónCuenta lo que está presente y lo que falta
- 8DesafíoComprueba un identificador y una medición
- 9EjemploConvierte texto numérico y rastrea un fallo
- 10Idea claveConserva los recuentos con valores faltantes como enteros
- 11EjemploHabilita las operaciones con fechas
- 12DesafíoCorrige una importación numérica
- 13RepasoRelaciona la estructura, los tipos y los recuentos
3Selecciona filas por identidad o ubicación
10 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDetermina si importa la identidad o la ubicación
- 2EjemploLee un pedido conocido
- 3EjemploLee un intervalo por etiquetas con ambos extremos incluidos
- 4DesafíoConserva una tabla de una fila
- 5EjemploLee un intervalo por posiciones
- 6ConsejoLee desde el final y más allá del límite
- 7DesafíoPredice una fila frente a un valor
- 8ConexiónUsa una forma breve para una celda
- 9DesafíoSigue una fila durante una ordenación
- 10RepasoIndica tanto el selector como la forma
4Filtra registros y actualiza la tabla adecuada
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónConvierte una pregunta sobre datos en una prueba por filas
- 2EjemploCrea una máscara booleana
- 3ExplicaciónExige ambas condiciones
- 4ConsejoUsa un solo valor de verdad cuando sea necesario
- 5DesafíoCuenta una condición combinada
- 6EjemploExpresa un intervalo directamente
- 7Idea claveEncuentra valores ausentes con una prueba de valores faltantes
- 8DesafíoConvierte un filtro en una consulta
- 9EjemploAplica el descuento exactamente a los precios de Home
- 10ExplicaciónComprende por qué una cadena no modifica la tabla de origen
- 11ConsejoEmpareja los valores de actualización por etiqueta
- 12DesafíoCombina el filtrado y una actualización
- 13RepasoExpresa las condiciones y los destinos de forma explícita
5Convierte columnas existentes en nuevos datos útiles
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónExpresa una regla para toda la columna
- 2EjemploCalcula un ingreso por pedido
- 3Idea claveInterpreta el denominador de una media
- 4EjemploAñade una columna dentro de una cadena
- 5DesafíoColoca una Series entrante
- 6EjemploElige etiquetas a partir de un umbral
- 7ExplicaciónDecide qué significan los valores no enumerados
- 8DesafíoElige un método de recodificación parcial
- 9ConsejoPasa funciones sin llamarlas
- 10EjemploLimita valores sin eliminar registros
- 11DesafíoSigue una columna calculada y recodificada
- 12RepasoComprueba la regla y las entradas sin correspondencia
6Ordena datos e interpreta sus resúmenes
18 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónElige la vista que responde a la pregunta
- 2EjemploOrdena por puntuación antes que por nombre
- 3ConsejoConserva completo un empate en el límite
- 4DesafíoDistingue el orden de las etiquetas del orden de los valores
- 5EjemploCalcula la media de los puestos ocupados por empates
- 6ExplicaciónElige entre huecos o grupos consecutivos
- 7DesafíoInterpreta un rango percentil
- 8EjemploCrea un resumen meteorológico
- 9ExplicaciónIguala el denominador de dispersión
- 10EjemploInterpreta cuartiles y una media afectada por la asimetría
- 11DesafíoComprueba una media junto con su recuento
- 12EjemploCuenta categorías y proporciones
- 13Idea claveDistingue tres preguntas sobre valores
- 14DesafíoCuenta una condición como fracción
- 15ExplicaciónDescribe la asociación con precisión
- 16DesafíoInterpreta una matriz después de comprobar los datos
- 17DesafíoElige y comunica un resumen
- 18RepasoMantén visible la regla de cada resumen
Ejercicios de Series y DataFrames de pandas
Set 1: Interpreta y utiliza una tabla de pandas10 Preguntas de Práctica
Pregunta 1 de 10
s = pd.Series([8, 13, 5], index=[2, 0, 1]). ¿Qué devuelve s[0]?Mostrar respuestaOcultar respuesta
s.iloc[0]; las claves enteras entre corchetes siguen siendo etiquetas.Pregunta 2 de 10
[4.0, NaN, 9.0] y representa recuentos enteros de artículos. ¿Qué tipo de datos puede conservar el valor faltante y almacenar los recuentos conocidos como enteros?Mostrar respuestaOcultar respuesta
Int64, con I mayúscula, admite valores faltantes, almacena números enteros y representa la entrada faltante como <NA>. El tipo int64 ordinario no tiene marcador de valor faltante y no puede convertir este NaN. El texto conservaría una representación de las entradas, pero no almacenaría recuentos numéricos enteros.Pregunta 3 de 10
[30, 10, 20]. ¿Qué fila selecciona df.loc[10]?Mostrar respuestaOcultar respuesta
loc interpreta 10 como una etiqueta de índice, por lo que selecciona la segunda fila mostrada. No cuenta diez posiciones hacia adelante. La ubicación de la fila puede cambiar después de ordenar, pero su etiqueta permanece igual hasta que se cambia explícitamente el índice.Pregunta 4 de 10
df tiene los valores de categoría ["A", "B", "A", "B"] y las masas [3, 7, 9, 4]. Con el índice predeterminado, ¿qué etiquetas cumplen (df["category"] == "A") | (df["mass_kg"] > 6)?Mostrar respuestaOcultar respuesta
& en lugar de |.Pregunta 5 de 10
[2.0, 5.0, NaN] y los precios unitarios [7.0, 3.0, 9.0]. ¿Cuál es la media predeterminada de sus productos por fila?Mostrar respuestaOcultar respuesta
Pregunta 6 de 10
[5.0, NaN, 2.0]. En una ordenación descendente de valores con las opciones predeterminadas, ¿dónde aparece NaN?Mostrar respuestaOcultar respuesta
na_position="first".Pregunta 7 de 10
a = pd.Series([6, 9], index=["east", "west"]) y b = pd.Series([4, 7], index=["west", "east"]). ¿Cuáles son (a + b).loc["east"] y (a + b).loc["west"]?Mostrar respuestaOcultar respuesta
Pregunta 8 de 10
df.isna().any(axis=1).sum()?Mostrar respuestaOcultar respuesta
any(axis=1) reduce cada fila a una respuesta: si contiene al menos un valor faltante. Ambas filas afectadas son True, por lo que la suma es 2. Sumar los recuentos de valores faltantes de todas las columnas daría cuatro celdas, pero esta expresión cuenta las filas una sola vez.Pregunta 9 de 10
["Zoe", "Ari", "Bo", "Dee"] con puntuaciones [8, 8, 10, 8]. Después de ordenar por puntuación descendente y nombre ascendente, y tomar las dos primeras filas, ¿qué nombres aparecen en orden?Mostrar respuestaOcultar respuesta
Pregunta 10 de 10
s contiene ["A", "B", "C", "A", "B"]. Después de s.replace({"C": "B"}), ¿cuáles son la moda y su frecuencia relativa?Mostrar respuestaOcultar respuesta
Set 2: Elige la operación adecuada de pandas10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
.size?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
df tiene cinco filas. ¿Qué posiciones de fila selecciona df.iloc[1:4]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
chosen = df[df["active"]] va seguido de chosen["score"] = 0. ¿Qué sucede con df?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
[4, 6, 9], ¿qué etiquetas resultan de np.where(s >= 6, "large", "small")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
[90, 70, 90, 50] se clasifican con method="min", ascending=False. ¿Qué rangos resultan en el orden original de las filas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
code;mass_kg, seguido de 007;1,5 y 012;2,0. ¿Qué carga conserva los códigos y permite calcular la media numérica de la masa?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
df tiene el índice [10, 20, 30] y los ingresos [12.0, 24.0, 36.0]. Se asigna a una columna nueva df.loc[df["revenue"] > 15, "revenue"] / 2. ¿Cuál es la suma predeterminada de la nueva columna?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
[12, 4, 12, 8] se clasifican de forma ascendente con el método predeterminado y pct=True. ¿Qué rango percentil corresponde a cada 12?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
df.index es ["a", "b", "a"]. ¿De qué tipo es df.loc["a"]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Comprueba filas, tipos y cálculos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
a = pd.Series([5, 8], index=["u", "v"]) y b = pd.Series([2, 4], index=["v", "w"]). Sea c = a.add(b, fill_value=0). ¿Cuánto es c[c > 4].sum()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
df tiene un índice sin nombre [40, 60]. ¿Qué hace df.reset_index() con esas etiquetas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
501,Sensor. ¿Cómo debe cargarse con las columnas id y device sin perder ese primer registro?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
[11, 12, 13, 14], ¿qué forma tiene df.loc[12:14, ["mass_kg"]]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
cutoff = 6. ¿Cómo puede query seleccionar las filas cuyo mass_kg supera esa variable de Python?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
pd.Series([-2, 6, 14]).clip(lower=0, upper=10)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
["L", "M", "L", None]. ¿Qué proporción asigna a L value_counts(normalize=True) con las opciones predeterminadas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
df tiene el índice [4, 8, 12] y los precios de coma flotante [10.0, 20.0, 30.0]. Una máscara selecciona las etiquetas 4 y 12. Después de df.loc[mask, "price"] = pd.Series([7.0, 9.0], index=[12, 4]), ¿cuáles son los precios en el orden original de las filas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
[11, 9, 9, 6]. ¿Cuáles son el número de filas y la puntuación más baja que devuelve df.nlargest(2, "score", keep="all")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Sigue varias operaciones conjuntamente10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
df = pd.DataFrame({"a": [2, 5], "b": [7, 1]}). ¿Qué valores devuelve df.sum(axis=1) en el orden de las filas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
s = pd.Series(["8", "bad", "2.5"]). ¿Cuáles son los valores después de pd.to_numeric(s, errors="coerce")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
[7, 2, 9] y los valores de x [4, 12, 8]. Sea d = df.sort_values("x", ascending=False). ¿Cuánto es d.iloc[:2]["x"].sum() - d.loc[7, "x"]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
[2, 5, 8], ¿qué valores pasan .between(2, 8, inclusive="neither")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
df tiene el índice [5, 9, 12], la cantidad [2, 3, 4] y el precio [6, 5, 2]. Calcula los ingresos, conserva los superiores a 10 y después asigna pd.Series([20.0], index=[9]) como adjusted. ¿Cuál es la media predeterminada del valor ajustado?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
[3.0, 7.0, NaN, 8.0]. ¿Cuáles son su media y su recuento predeterminados?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
df = pd.DataFrame({"a": [2, 6], "b": [5, 3]}, index=[8, 4]). Después de df = df.T, ¿cuáles son df.shape y df.loc["b"].sum()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
"1,500", "800", "unknown", "200", sin valores faltantes previos. Después de eliminar las comas, aplicar coerción numérica y calcular la media predeterminada, ¿cuáles son la media y el número de nuevos valores faltantes?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
[2.0, NaN, 8.0, 5.0]. ¿Cuál es la suma de los valores seleccionados por s.notna() & (s != 5) & (s < 8)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
[1, 2, 3, 4, 40] mm. La media es 10 mm y la mediana es 3 mm. ¿Por qué describe mejor la mediana una medición típica en este caso?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Resuelve problemas de alineación y resumen10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
s = pd.Series(["X", "Y", "X", "Z"]). Después de t = s.map({"X": 4, "Y": 10}), ¿cuáles son t.count() y t.mean()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
s de pandas contiene [2.0, 4.0, 6.0]. ¿Cuáles son s.std() y np.std(s.to_numpy()), redondeados a tres cifras decimales?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
df. La siguiente línea es df.reset_index(). ¿Por qué sigue fallando df.loc[0]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
[8, 3, 6, 1]. ¿Qué etiquetas permanecen en df.iloc[-2:][["x"]]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
df tiene el índice ["k", "m", "p"], a [4, 8, 12] y b [3, 1, 5]. Sea d = df.loc[(df["a"] >= 8) & (df["b"] < 4), ["a", "b"]]. ¿Cuánto es d.sum(axis=1).iloc[0]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
["Probe A", "sensor", None, "PROBE B"]. ¿Qué etiquetas de fila predeterminadas pasan .str.contains("probe", case=False, na=False)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
df tiene etiquetas predeterminadas y precios de coma flotante [8.0, 12.0, 18.0]. Se ejecuta mask = df["price"] >= 12 y después df.loc[mask, "price"] = pd.Series([9.0], index=[2]). ¿Qué devuelve df["price"].count()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
[60, 90, 90, 75] en el orden de las filas. Se asigna un rango denso descendente como place y la tabla se ordena por place de forma ascendente con una ordenación estable. ¿Qué etiquetas de fila originales aparecen primero?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
df tiene x [1, 2, 3, 4], y [100, 6, 4, 2] y z [5, 5, 5, 5]. Después de df.loc[df["x"] > 1, ["x", "y", "z"]].corr(), ¿qué valores aparecen para x con y y para z consigo misma?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Accesor de fecha y hora (dt)
.dt.day_name() devuelve el día de la semana asociado a cada fecha de pedido.Accesor de texto (str)
orders["product"].str.len() calcula una longitud de nombre para cada producto registrado.Actualización condicional
df.loc[mask, "price"] *= 0.9 aplica un descuento exactamente a las filas seleccionadas por la máscara de actualización de precios.Agregación (reducción)
agg(["mean", "max"]) informa de dos resúmenes distintos para cada columna numérica seleccionada.Alineación por etiquetas
Aplicación de una función por filas (apply)
Asignación de columnas (assign)
Asignación encadenada
Asignación escalar
Asociación
C
Cambio de etiquetas (rename)
rename(columns={"unit_price": "price"}) cambia el nombre de una columna sin cambiar sus valores.Clave de ordenación
Coerción de tipos
"7", "unknown", "2.5" con errors establecido en coerce crea una nueva entrada faltante.Coincidencia de texto
"note" con case=False encuentra Notebook aunque su N sea mayúscula.Columna
Columna derivada
Comprobación de pertenencia (isin)
["Home", "Bags"] sustituye dos comparaciones de igualdad unidas por «o».Comprobación de pertenencia a un intervalo (between)
between(5, 20, inclusive="left") incluye 5, pero excluye 20 del intervalo de precios.Comprobación de registros duplicados
duplicated(subset="product") marca las entradas posteriores de Notebook incluso cuando todos los identificadores de pedido son distintos.Conjunción lógica elemento a elemento
Conversión de tipos
.dt.month y después asigna de nuevo la Series convertida.Copia al escribir (Copy-on-Write)
Correlación de Pearson
Correlación de Spearman
Correspondencia mediante un diccionario
Cuantil
quantile(0.25) puede dar un cuartil inferior situado entre dos temperaturas medidas en una columna de temperatura.D
Delimitador
sep=";" incluso si los números dentro de sus campos usan comas decimales.Desviación estándar (desviación típica)
Detección de valores faltantes (isna)
Difusión de un escalar
Directorio de trabajo
Disyunción lógica elemento a elemento
E
Eje
df.sum(axis=1) suma las columnas numéricas seleccionadas dentro de cada fila y da un total por fila.Encabezado (cabecera)
header=None cuando la primera línea contiene un registro real que debe permanecer en los datos.Error de coma flotante
1.9000000000000001, que puede redondearse a dos cifras decimales.Escalar
Establecimiento del índice (set_index)
orders.set_index("order_id") convierte un número de pedido en la etiqueta usada para búsquedas posteriores de filas.F
Filtrado
Filtrado mediante una expresión de consulta (query)
query("quantity >= 2 and unit_price < 5") puede expresar con claridad un filtro combinado de pedidos.Forma (shape)
(6, 4) y 24 celdas.Frecuencia relativa
Frecuencias absolutas
Í
Índice
population["Lima"] solicite el valor de una ciudad sin conocer su posición.Índice de rango entero (RangeIndex)
reset_index(drop=True) sustituye las etiquetas conservadas por un nuevo índice predeterminado.I
Inferencia de tipos
"001" en 1 salvo que su tipo de datos se especifique como texto.M
Marcador de valor faltante
na_values=["-"] indica al lector de CSV que un guion en el archivo representa una entrada faltante.Máscara booleana
Matriz de correlaciones
Media aritmética (promedio)
Mediana
Moda
Muestra aleatoria
sample(3, random_state=0) es útil para comprobar filas más allá del principio o del final de una tabla.N
No es un número (NaN)
O
Observación
Operación vectorizada
Orden ascendente
ascending=False cuando una tabla de resultados deba mostrar primero las puntuaciones más altas.Ordenación estable
kind="stable" mantiene dos puntuaciones iguales en su orden anterior en lugar de imponer una nueva regla de empate.P
Posición negativa
R
Rango
Rango denso
Rango medio
Rango mínimo
Rango percentil
Rango por orden de aparición
Recorte de valores (clipping)
Recuento de valores distintos
Recuento de valores no nulos
Reducción booleana
.any() de una máscara puede responder si al menos un pedido tiene una cantidad faltante.Restablecimiento del índice (reset_index)
reset_index() sin más.S
Segmento por etiquetas
.loc[1002:1004] incluye las tres etiquetas de pedido 1002, 1003 y 1004.Segmento por posiciones
.iloc[1:3] devuelve las posiciones 1 y 2 y puede diferir de un segmento de loc que incluye ambos extremos.Selección condicional
Selección de los n valores mayores
nlargest(1, "points", keep="all") devuelve dos filas si dos personas comparten la puntuación más alta.Selector de celda por etiquetas (at)
orders.at[2, "product"] lee el producto con etiqueta 2 en una tabla de pedidos con índice predeterminado.Selector de celda por posiciones (iat)
orders.iat[2, 2] lee la celda de la tercera fila y la tercera columna de una tabla de pedidos.Selector de columnas
["product", "unit_price"] elige las columnas que se mostrarán.Selector por etiquetas (loc)
.loc[1004, "product"] seleccione el producto de un pedido identificado.Selector por posiciones (iloc)
.iloc[-1] devuelve la última fila incluso si su etiqueta de índice es un número de pedido como 1006.Serie (Series)
Suma acumulada
Sustitución
T
Tabla de datos (DataFrame)
Tipo de datos (dtype)
float64 cuando un registro tiene una cantidad vacía que se lee como NaN.Tipo de datos categórico (category)
min() incluso cuando sus etiquetas mostradas son texto ordinario.Tipo entero que admite valores faltantes
"Int64" en lugar de fallar al convertirse al tipo int ordinario.U
Ubicación de los valores faltantes
na_position="first".Unicidad del índice
.index.is_unique antes de esperar que un identificador de pedido devuelva exactamente una fila.V
Valores separados por comas (CSV)
Variable de consulta
limit = 5, query("unit_price > @limit") compara los precios con ese valor de Python.Varianza
Vista previa
head(3) permite comprobar el encabezado y los tres primeros registros sin mostrar todas las filas.Sobre esta unidad
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.