El filtrado de datos en pandas te permite extraer subconjuntos específicos de un DataFrame aplicando condiciones lógicas, una técnica esencial cuando quieres analizar ventas de un país, productos por encima de cierta cantidad o transacciones en un periodo concreto. Aquí aprenderás a aplicar filtros simples, combinados y por fechas para enfocar tu análisis en lo que realmente importa.
¿Cómo filtrar un DataFrame por una columna específica?
Antes de filtrar, conviene preparar el set de datos: leer el CSV, convertir la columna de fechas a serie de tiempo, eliminar valores faltantes y crear columnas derivadas. Por ejemplo, una columna Total Price que multiplica la cantidad por el precio unitario te da el ingreso por transacción [01:25].
La sintaxis básica para filtrar por país se ve así:
Le estás diciendo a pandas: del DataFramesales_data, devuélveme solo las filas donde la columna Country sea igual a United Kingdom. Y aquí viene un detalle que confunde a muchos: si el valor que pasas tiene un espacio extra al final, el resultado será un DataFrame vacío. La coincidencia debe ser exacta [03:10].
¿Por qué mi filtro en pandas devuelve un DataFrame vacío? Casi siempre es por una diferencia de texto: un espacio en blanco, una mayúscula distinta o un acento. pandas compara cadenas de forma exacta, así que revisa el valor original con .unique() antes de filtrar.
¿Cómo filtrar usando operadores de comparación?
Los operadores como >, <, >= y <= te permiten filtrar valores numéricos. Por ejemplo, si quieres ver solo las ventas con cantidades altas:
Fíjate en algo importante: en el resultado, el índice de la izquierda conserva la posición original de cada fila. Si filtras Quantity > 40, la fila que tenía cantidad 32 desaparece del resultado, aunque el índice salte de 9 a 26 [05:18]. pandas no renumera; te muestra solo las filas que cumplen la condición.
¿Cómo combinar varias condiciones en una sola línea?
Para aplicar dos filtros simultáneos, usa el operador & (and lógico) y envuelve cada condición entre paréntesis. Esto es obligatorio por la precedencia de operadores en Python:
Con esto obtienes únicamente las ventas del Reino Unido con cantidad mayor a 40. Si subes el umbral a 100 o a 300, el resultado se reduce progresivamente, lo que te permite iterar sobre tus datos hasta encontrar el segmento que buscas [07:42].
¿Para qué sirve el operador & al filtrar en pandas? Combina dos o más condiciones lógicas en una sola expresión. Cada condición debe ir entre paréntesis y todas deben cumplirse para que la fila aparezca en el resultado.
¿Cómo filtrar por fechas y series de tiempo en pandas?
Cuando una columna ya está convertida a tipo datetime, puedes acceder a sus componentes con el accesor .dt. Por ejemplo, para extraer solo las ventas del año 2011:
El resultado en este caso fue de aproximadamente 380 mil filas para 2011, mientras que para 2010 solo hay alrededor de 26 mil filas, lo que confirma que el grueso del set de datos pertenece al año más reciente [10:15].
¿Cómo filtrar por año y mes al mismo tiempo?
Para aislar las ventas de un mes específico, combina .dt.year con .dt.month. Recuerda que los meses se representan con números del 1 al 12, donde 1 es enero y 12 diciembre:
Diciembre de 2010 devuelve 26 850 filas. Si en cambio pides enero de 2010, el resultado estará vacío, no porque tu código falle, sino porque el set de datos arranca desde cierto mes del 2010 [12:30]. Conocer el rango temporal de tu fuente evita conclusiones equivocadas.
¿Cómo extraigo el año o el mes de una columna de fechas en pandas? Usa .dt.year, .dt.month o .dt.day sobre una columna de tipo datetime. Estos accesores devuelven el componente como número entero, listo para comparar.
¿Por qué el filtrado es clave para capturar insights?
Filtrar no es solo una operación técnica: es la forma de aislar el segmento de datos que responde una pregunta de negocio. Cuando le presentas resultados a un cliente o a stakeholders, los insights relevantes salen de subconjuntos bien definidos, no del DataFrame completo.
Algunos patrones útiles que ya puedes aplicar:
Filtrar por categoría de texto, como país o producto.
Filtrar por umbrales numéricos, como cantidad o precio mínimo.
Filtrar por componentes de fecha, como año, mes o trimestre.
Combinar varias condiciones con & para análisis más finos.
Aplica estos mismos pasos al set de datos que elegiste para tu portafolio. ¿Qué pregunta de negocio quieres responder con tu primer filtro combinado? Cuéntalo en los comentarios.
En mi opinión una sintaxis más clara y legible de la que se muestra acá es usar la función query, además otro punto a destacar es que al usar print() para mostrar el dataset sale en un formato tampoco muy legible, una mejor opcion sería simplemente escribir el nombre del dataset y se imprime con un formato estilo tabla, adjunto imagen de como lo he estado trabajando.
Concuerdo, en todo el curso he tratado de evitar el print a la hora de imprimir el dataset.
El método query es limitado, lo más poderoso para consultas complejas es pasar la serie booleana como índice así como lo hace la profesora, más que nada cuando ya se comienzan a hacer consultas más complejas.
Si les sale un error al intentar filtrar por fecha es porque no hicieron el paso de convertir la columna de InvoiceDate a fecha, puesto que en el dataframe original esta columna viene de tipo Objeto. Para convertirla solo debe escribir:
no se quien lee esto ahora pero el DataFrame en la columna 'Quantity' contiene valores negativos, he trabajado en facturacion y esto es un error grandisimo de ventas puesto que evidentemente en una situacion real esto no puede ser cierto ni en un inventario ni se pudo hacer una venta de un producto que no se encuentra en existencias. por tanto si la intencion es enseñar herramientas para analizar estos datos pero todos los analisis de cantidad de cantidad de ventas totales son falsos para una situacion real porque esta restanto en la suma valores que no deberian estar ahi
No tengo experiencia analizando estos datos, pero haciendo la limpieza de los datos vi que los datos negativos, tanto en Quantity como en Unitprice, se deben a que son cancelaciones o devoluciones de compra.
Los InvoiceNo que estan involucrados es estas operaciones tienen la letra "C" delante lo que indica que es una cancelacion o devolucion. Como dije antes, no tengo experiencia practica en el analisis de datos comerciales pero a mi me interesaria saber si realicé devoluciones de compras para conocer el dato correcto de mi stock y de mi caja.
Saludos.
transacciones realizadas en el país 'Germany' durante Diciembre de 2010, con una cantidad mayor a 5
Lee el archivo online_retail.csv en un DataFrame de Pandas llamado sales_data.
Convierte la columna InvoiceDate a formato datetime utilizando pd.to_datetime.
Elimina filas con valores faltantes en las columnas críticas (CustomerID y InvoiceDate) usando dropna.
Crea una nueva columna TotalPrice como el producto de las columnas Quantity y UnitPrice.
Muestra las primeras cinco filas del DataFrame limpio utilizando head().
Resultado: Las primeras cinco filas del conjunto de datos, mostrando las columnas InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID, Country y el nuevo TotalPrice.
Descripción: Filtra el conjunto de datos para incluir solo las filas donde el año en la columna InvoiceDate sea 2010. Esto se logra utilizando .dt.year.
Resultado: Un DataFrame que contiene todas las ventas ocurridas en 2010.
Descripción: Filtra el conjunto de datos para incluir solo las filas donde:
El año en la columna InvoiceDate sea 2010.
El mes en la columna InvoiceDate sea diciembre (12). El filtrado se realiza utilizando un operador lógico AND (&).
Resultado: Un DataFrame que contiene todas las ventas ocurridas en diciembre de 2010.
¿Qué es el fitrado de datos en Pandas?
El filtrado de datos con condiciones en pandas se refiere a seleccionar filas de un DataFrame o Series que cumplen con ciertos criterios. Esto se hace utilizando expresiones booleanas para definir las condiciones, y luego aplicándolas para obtener solo los datos que satisfacen esas condiciones.
¿Para qué filtrar la información?
Filtrar la información nos permite prestar atención en aspectos específicos de nuestro set de datos.
Ejemplo: determinar las ventas por países o por series de tiempo.
Porque en la primer forma esta mal escrito el nombre del país (Kindom), en la segunda forma si esta bien escrito (Kingdom)
¿Qué cambia si se usan los parentesis?
El join izquierdo incluye todas las filas del DataFrame de la izquierda, y solo las filas coincidentes del DataFrame de la derecha. Si no hay coincidencia, se llenan con NaN.
El join derecho incluye todas las filas del DataFrame de la derecha y solamente las filas coincidentes del DataFrame de la izquierda. Al igual que en el join izquierdo, las filas sin coincidencia se llenan con NaN.
Ambos métodos permiten combinar información de diferentes fuentes, pero cada uno tiene un enfoque distinto en cuanto a qué filas se mantienen.
La clase se centra en la reestructuración de datos usando Pivot Tables en Pandas. Se enseñó cómo crear tablas dinámicas para resumir y reorganizar datos crudos en un DataFrame, permitiendo realizar cálculos estadísticos como sumas y promedios. También se explicó cómo modificar índices usando columnas y cómo apilar y desapilar datos para una mejor visualización. Se enfatizó el uso de estas herramientas para descubrir patrones y obtener insights valiosos en el análisis de datos.
El filtrado de datos es una técnica utilizada en el análisis de datos para extraer subconjuntos específicos de información de un conjunto de datos más grande. Permite enfocarse en registros que cumplen ciertas condiciones, como analizar ventas de un país específico o transacciones en un periodo concreto. En Pandas, esto se logra utilizando condiciones lógicas sobre las columnas del DataFrame, permitiendo así una mejor comprensión y visualización de los datos relevantes para el análisis.
El código no se encuentra en recursos
Está en la siguiente clase. Ya se lo arreglará en esta. Gracias por reportarlo 😓🙌🙌
📝 Mis apuntes de la clase
El filtrado de datos en pandas es:
Técnica que permite extraer subconjuntos específicos del Data set.
Se basa en condiciones lógicas.
También aplica dentro de la funcionalidad .loc
Permite:
Prestar atención más detallada en aspectos específicos de los datos
💡 Datos de un periodo de tiempo especifico.
💡 Información de una región o regiones en concreto.
💡Datos según una categoría.
Sintaxis:
Obtendremos un nuevo DataFrame con los datos que cumplan con la condición dada:
# Una condicióndf[df["columna"]=="un valor"]# Dos condiciones df[(df["columna"]>="un valor")&(df["columna"]<="un valor")]# operador anddf[(df["columna"]<="un valor")|(df["columna"]>="un valor")]# operatos or# Con .locdf.loc[df["columna"]=="un valor"]df.locdf[(df["columna"]<="un valor")|(df["columna"]>="un valor")]
Pero también podemos obtener un DataFrame solo con las columnas que necesitamos para el análisis.
📢 Si solo queremos una sola columna entonces como resultado tendremos una Serie.
# Una condicióndf[df["columna"]=="un valor"]["columna"]# Serie # Dos condiciones df[(df["columna"]>="un valor")&(df["columna"]<="un valor")][["columna uno","columna 2"]]# DataFramedf[(df["columna"]<="un valor")|(df["columna"]>="un valor")][["columna uno","columna 2","columna 2"]]# DataFrame# Con .locdf.loc[df["columna"]=="un valor",["columna uno","columna 2"]]# DataFramedf.loc[(df["columna"]<="un valor")|(df["columna"]>="un valor"),"columna"]# Serie
Utilizar .loc con filtros es una herramienta potente para actualizar datos dada una condición.
Ejemplos:
# Ventas realizadas en Reino Unido, solo necesitamos Descripción y Cantidad:uk_sales = retail_df[retail_df["Country"]=="United Kingdom"][["Description","Quantity"]]print("Ventas en Reino Unido")display(uk_sales.head())# Ventas realizadas en semana santa del 2011# 17/abirl/2011 al 23/abril/2011ss_2011 = retail_df[(retail_df["InvoiceDate"]>= pd.Timestamp(2011,4,17))&(retail_df["InvoiceDate"]<= pd.Timestamp(2011,4,23))]print("Semana Sanda 2011")display(ss_2011.head())
# Solo las ventas de diciembre:december_sales = retail_df.loc[(retail_df["InvoiceDate"].dt.year ==2011)&(retail_df["InvoiceDate"].dt.month ==12),["Description","Quantity","UnitPrice","TotalPrice"]]print("Ventas de Diciembre de 2011")display(december_sales.head())
¿Cuál es el producto con la cantidad de ventas más alta de cada vez para el año 2011?
En **Pandas**, el filtrado de datos basado en condiciones es una operación clave para seleccionar filas de un **DataFrame** que cumplan ciertos criterios. Aquí te muestro varias formas de hacerlo con ejemplos.
### 1. **Filtrado básico con una condición**
Puedes filtrar filas de un DataFrame usando operadores lógicos como ==, >, <, etc.
#### Ejemplo:
import pandas as pd
\# Crear un DataFrame de ejemplo
df = pd.DataFrame({  'nombre': \['Ana', 'Juan', 'Pedro', 'Lucía'],  'edad': \[25, 30, 22, 28],  'ciudad': \['Madrid', 'Barcelona', 'Sevilla', 'Madrid']})\# Filtrar filas donde la edad sea mayor a 25filtro = df\[df\['edad']>25]print(filtro)
**Resultado:**
  nombre edad ciudad
1Juan30Barcelona3Lucía28Madrid
Si quieres eliminar filas duplicadas, puedes usar drop\_duplicates().
#### Ejemplo:
\# Eliminar filas duplicadas en todas las columnas
filtro = df.drop\_duplicates()print(filtro)
#### Ejemplo eliminando duplicados basados en una sola columna:
\# Eliminar filas duplicadas basadas solo en la columna 'nombre'filtro = df.drop\_duplicates(subset='nombre')print(filtro)
### 9. **Filtrar filas por rango de valores (between())**
El método between() permite filtrar filas dentro de un rango.
#### Ejemplo:
\# Filtrar filas donde la edad esté entre 23 y 30filtro = df\[df\['edad'].between(23,30)]print(filtro)
**Resultado:**
  nombre edad ciudad
1Juan30Barcelona3Lucía28Madrid
Estos son algunos ejemplos básicos y avanzados para filtrar datos en **Pandas** utilizando diversas condiciones. Si tienes algún caso específico o necesitas más detalles, ¡hazme saber!