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í:
python
uk_sales = sales_data[sales_data['Country'] == 'United Kingdom']
print(uk_sales)
Le estás diciendo a pandas: del DataFrame sales_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:
python
high_quantity = sales_data[sales_data['Quantity'] > 10]
print(high_quantity)
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:
python
uk_high_sales = sales_data[(sales_data['Country'] == 'United Kingdom') & (sales_data['Quantity'] > 40)]
print(uk_high_sales)
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:
python
sales_2011 = sales_data[sales_data['InvoiceDate'].dt.year == 2011]
print(sales_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:
python
sales_dec_2010 = sales_data[(sales_data['InvoiceDate'].dt.year == 2010) & (sales_data['InvoiceDate'].dt.month == 12)]
print(sales_dec_2010)
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.