Filtrado de Datos en Pandas para Análisis Efectivo
Resumen
¿Cómo aplicar el filtrado de datos en Pandas?
El filtrado de datos es una técnica esencial en el análisis de datos que nos permite concentrarnos en subconjuntos relevantes basándose en condiciones específicas. Imagina que puedes centrarte únicamente en las ventas de un país determinado, evaluar productos que superen un umbral de ventas, o analizar transacciones dentro de un período de tiempo concreto. Todo esto es posible con el filtrado de datos en Pandas, una poderosa librería de Python.
¿Cómo extraer un subconjunto de datos según un criterio específico?
Para realizar filtrado de datos, primero debemos importar la librería Pandas y tener un DataFrame ya cargado. Supongamos que queremos filtrar las ventas realizadas en el Reino Unido. El proceso es el siguiente:
# Filtrar ventas en Reino Unidouk_sales = sales_data[sales_data['Country']=='United Kingdom']print(uk_sales)
Es crucial asegurarse de que no hay espacios en el nombre del país al aplicar estos filtros, ya que podría devolver un DataFrame vacío por un error tipográfico.
¿Cómo implementar operaciones de comparación en columnas?
Pandas nos ofrece la posibilidad de aplicar operadores de comparación para filtrar datos, por ejemplo, seleccionar ventas donde la cantidad sea superior a un determinado número:
# Filtrar ventas donde la cantidad sea mayor a 10high_quantity_sales = sales_data[sales_data['Quantity']>10]print(high_quantity_sales)
Podemos cambiar el número de comparación para ajustar el filtrado según nuestras necesidades.
¿Cómo combinar condiciones de filtrado?
A menudo, es necesario aplicar múltiples filtros para obtener un conjunto de datos aún más específico. A continuación se muestra cómo podemos filtrar las ventas que cumplan dos condiciones: ventas en el Reino Unido y con cantidades superiores a 40:
# Filtrar ventas altas en Reino Unidohigh_uk_sales = sales_data[(sales_data['Country']=='United Kingdom')&(sales_data['Quantity']>40)]print(high_uk_sales)
Al combinar condiciones, utilizamos el operador & para asegurarnos de que ambas condiciones se cumplan simultáneamente.
¿Cómo manejar series de tiempo en filtrado de datos?
Pandas nos permite trabajar con series de tiempo, lo que facilita el filtrado por años, meses o días específicos. Por ejemplo, si deseamos solo las ventas del año 2011:
# Filtrar ventas del año 2011sales_2011 = sales_data[sales_data['InvoiceDate'].dt.year ==2011]print(sales_2011)
Al acceder a las propiedades de una serie de tiempo, podemos utilizar dt para especificar atributos como el año, mes o día.
¿Cómo aplicar filtrado con condiciones de año y mes?
Para filtrar por un año y un mes específicos, el siguiente código muestra cómo obtener las ventas de diciembre de 2010:
# Filtrar ventas de diciembre de 2010december_2010_sales = sales_data[(sales_data['InvoiceDate'].dt.year ==2010)&(sales_data['InvoiceDate'].dt.month ==12)]print(december_2010_sales)
Este método es útil para análisis temporales detallados donde los patrones estacionales pueden ser importantes.
Recomendaciones finales para el análisis de datos
Con el filtrado de datos, podemos obtener insights valiosos de grandes conjuntos de datos, ayudándonos a ofrecer análisis precisos a nuestros clientes o stakeholders. Es imprescindible aplicar estos conceptos paralelamente con datasets propios, ya que esto enriquece nuestro portafolio y amplía nuestras habilidades analíticas. Siempre intenta experimentar y ajustar los filtros según las características de tu conjunto de datos para obtener información más profunda y valiosa.
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!