Me puse a iterar con las funciones en un df y me encanto. Ideal para poder categorizar mejor tus datos.
# Ejemplo de comentariodata ={'Nombre':['Anna','Luis','Carlos','Maria'],'Edad':[28,34,29,42],'Ciudad':['Monterrey','Gdl','DF','Cancun']}#print(data)df = pd.DataFrame(data)print('DataFrame:\n', df)defcategorizar_edad(edad):if edad <30:return'Joven'else:return'Viejo'df['Categoria']= df['Edad'].apply(categorizar_edad)print('\nDataFrame con categoria de edad:\n', df)
muy bien
Les dejo un código que les puede servir cuando hagan Limpieza de datos y EDA:
A= pd.DataFrame({'Num':[4,None,9,None,77]})B= pd.DataFrame({'Num':[44,None,6,22,None]})null_A =A[A.Num.isna()==True].indexnull_B =B[B.Num.isna()==True].indexnull_A.intersection(null_B)```Les servirá para cuando quieran saber cuantas filas o registros de valores nulos o faltantes de dos o más columnas comparten y así sacar un porcentaje que les ayude a entender mejor cómo están distribuidos esos datos nulos entre las columnas.
yo halle este investigando como encontrara los lugares donde hay null en un df
print(f"Positions of null values:\n{null_positions}")
primero ubica todos los null en formato df, luego le aplica el método stack con su índex y luego hace un diccionario con todo aquello
Además de la función head() existen otras dos funciones similares:
tail(): Regresa las últimas 5 filas (por default) del DataFrame o de la Serie.
sample(): Regresa aleatoriamente 5 filas (por default) del DataFrame o de la Serie.
Tanto head(), tail() y sample() son de gran utilidad a la hora de darle un primer vistazo a los datos, y así podemos darnos una idea de que podemos hacer posteriormente en nuestros análisis.
Encontré algunos pequeños errores en el notebook aportado como recurso en esta lección:
mean_value = daily_sales.mean()print('La media es', mean_value)median_value = daily_sales.median()print('La mediana es', mean_value)sum_value = daily_sales.sum()print('La suma total es', mean_value)
El error consiste en que el argumento del print, en los tres casos, es mean_value.
El código correcto debería ser:
## Estadísticos básicos para series o columnas determinadas:mean_value = daily_sales.mean() # Mediaprint('La media es', mean_value)median_value = daily_sales.median() # Medianaprint('La mediana es', median_value)sum_value = daily_sales.sum() # Sumaprint('La suma total es', sum_value)```## Estadísticos básicos para series o columnas determinadas:mean\_value = daily\_sales.mean() # Mediaprint('La media es', mean\_value)median\_value = daily\_sales.median() # Medianaprint('La mediana es', median\_value)sum\_value = daily\_sales.sum() # Sumaprint('La suma total es', sum\_value)
Así es, el código compartido tiene pequeñitos errores, los que pueden versa más afectados por lo anterior son aquellos que tengan poca experiencia con estas herramientas; en mi caso, he leído y hecho ejercicios parecidos a estos, entonces detectar estos errores fue fácil para mí. Ojalá el Platzi Team remedie estos deslices, además en una clase anterior también hay otro despiste, en fin...
nadie es perfecto
Hola Karli, ¿porque cuando calculas la media no especificas el nombre de la columna? y en este caso la media se calculó sobre la columna Quantity
Hola Compañero, en este caso no se pone el nombre de la columna porque calculó la media sobre la variable llamada 'daily_sales' que ya contiene la información de la columna Quantity.
### Estructuras de Datos en Pandas y Funciones
Pandas proporciona dos estructuras de datos principales: **Series** y **DataFrame**, que permiten el análisis y manipulación de datos de una manera muy eficiente.
---
### 1. **Series**
Una **Series** es una estructura unidimensional similar a un array, lista o columna de una tabla. Cada elemento en una Series tiene una **etiqueta** o **índice**, lo que la convierte en una estructura de datos similar a un diccionario, con pares clave-valor.
#### Creación de una Serie:
import pandas as pd
\# Crear una Serie desde una lista
serie = pd.Series(\[10,20,30,40])
\# Crear una Serie con índices personalizados
serie\_personalizada = pd.Series(\[100,200,300], index=\['a','b','c'])print(serie)print(serie\_personalizada)
**Funciones importantes en Series:**
- **.head()**: Devuelve los primeros elementos de la Serie.
- **.tail()**: Devuelve los últimos elementos de la Serie.
- **.sum()**: Suma de todos los elementos.
- **.mean()**: Media de los elementos.
- **.max(), .min()**: Máximo y mínimo valor de la Serie.
- **.describe()**: Proporciona un resumen estadístico.
- **.value_counts()**: Cuenta los valores únicos en la Serie.
---
### 2. **DataFrame**
Un **DataFrame** es una estructura de datos bidimensional con columnas etiquetadas, que puede contener datos de diferentes tipos (números, cadenas, booleanos). Es la estructura más utilizada en Pandas y se puede entender como una tabla de datos similar a una hoja de cálculo o una tabla SQL.
#### Creación de un DataFrame:
\# Crear un DataFrame desde un diccionario
data ={  'Nombre': \['Ana', 'Luis', 'Carlos'],  'Edad': \[23, 45, 36],  'Ciudad': \['Madrid', 'Barcelona', 'Valencia']}df = pd.DataFrame(data)print(df)
#### Funciones comunes en DataFrame:
- **.shape**: Muestra las dimensiones (filas, columnas) del DataFrame.
- **.info()**: Proporciona información sobre el DataFrame (tipo de datos, valores nulos, etc.).
- **.describe()**: Devuelve estadísticas descriptivas de las columnas numéricas.
- **.head(n)**: Muestra las primeras n filas del DataFrame.
- **.tail(n)**: Muestra las últimas n filas.
- **.columns**: Devuelve los nombres de las columnas.
- **.dtypes**: Devuelve los tipos de datos de las columnas.
#### Indexación en DataFrames:
Puedes acceder a columnas, filas o subconjuntos de datos mediante diferentes métodos.
- **Acceder a columnas**:
\# Acceder a una columna específica
df\['Nombre']
\# Acceder a varias columnas
df\[\['Nombre','Edad']]
- **Acceder a filas** (con .loc\[] o .iloc\[]):
\# Acceder a una fila por etiqueta (índice)df.loc\[0]
\# Acceder a una fila por posición
df.iloc\[0]
---
### 3. **Funciones para Manipulación de Datos**
#### A) **Seleccionar Datos**
Puedes seleccionar datos de un DataFrame utilizando **condiciones**:
\# Filtrar filas donde la edad sea mayor que 30df\_filtrado = df\[df\['Edad']>30]print(df\_filtrado)
#### B) **Añadir, Modificar y Eliminar Columnas**
- **Añadir columnas**:
df\['Salario']= \[3000,4000,5000]# Añadir una nueva columna
- **Modificar columnas**:
df\['Edad']= df\['Edad']+5# Incrementar la edad en 5 años
- **Eliminar columnas**:
df = df.drop(columns=\['Salario'])# Eliminar la columna 'Salario'
#### C) **Agrupación y Agregación de Datos**
- **groupby()**: Agrupa los datos según una columna y aplica funciones agregadas como sum, mean, count, etc.
Pandas tiene una variedad de funciones estadísticas útiles para análisis de datos:
- **.sum()**: Suma de los valores.
- **.mean()**: Media de los valores.
- **.median()**: Mediana de los valores.
- **.std()**: Desviación estándar.
- **.corr()**: Correlación entre columnas.
- **.count()**: Número de valores no nulos.
\# Ejemplo de uso de funciones estadísticas
df\['Edad'].mean()# Media de la columna 'Edad'df\['Edad'].std()# Desviación estándardf.corr()# Correlación entre las columnas numéricas
---
### Conclusión
Pandas es una herramienta muy poderosa para la manipulación y análisis de datos. Con sus estructuras de datos principales (Series y DataFrame) y una amplia gama de funciones y métodos, es posible realizar operaciones complejas de manera eficiente. Esencial para la ciencia de datos, análisis financiero, procesamiento de archivos grandes y más.
Operaciones y Descripciones
1) Extracción de Nombres de Columnas: columns_names = retail_data.columns
print(columns_names)
Descripción: Extrae los nombres de las columnas del DataFrame retail_data y los imprime.
Descripción: Calcula y muestra estadísticas resumidas de las columnas numéricas en retail_data.
4) Media de Quantity: mean_value = daily_sales.mean()
print('La media es', mean_value)
Descripción: Calcula el promedio de la columna Quantity.
2) Mediana de Quantity: median_value = daily_sales.median()
print('La mediana es', median_value)
Descripción: Calcula la mediana de la columna Quantity.
6) Suma de Quantity: sum_value = daily_sales.sum()
print('La suma total es', sum_value)
Descripción: Suma todos los valores en la columna Quantity.
7) Conteo de Valores No Nulos en Quantity: count_values = daily_sales.count()
print(count_values)
Descripción: Cuenta el número de valores no nulos en la columna Quantity.
8) Operaciones en una Serie de Pandas: daily_sales = pd.Series([10, 20, None, 40, 50])
total_sum = daily_sales.sum()
print("Suma de Quantity:", total_sum)
count_values = daily_sales.count()
print("Conteo de Quantity:", count_values)
Descripción: Crea una Serie de Pandas y calcula la suma y el conteo de valores no nulos.
9) Vista Previa del DataFrame:retail_data.head()
retail_data.head(8)
Descripción: Muestra las primeras 5 filas del DataFrame (head() por defecto) o las primeras 8 filas (head(8)).
Aplicacion de funciones o métodos estadísticos (mean(), median(), var(), etc...) a DataFrames.
Como es de saber, las funciones estadísticas (a excepción de describe( )) son solo aplicables a valores numéricos (Int o Float). Debido a que muchos DataFrames (incluido el de la clase) poseen columnas con datos tipo strigs, al aplicicar estas funciones directamente el IDE envia un error de tipo ValueError. Dos maneras de saber que columnas poseen solo valores numéricos es usar la función describe( ) o usar el método select_dtypes():
Recuerda que Estamos enfocados en atender y brindar espacios para nomadas digitales, teletrabajo y coworking space en Agrolenials Paradise Ecohostel Country Inns contacto directo whatsapp +573206299333 y Faccebook
MOdelo coworcountry o modelo coworculture con muchas actividades para pausas activas y acompañamiento de tu rol profesional
# Tarea: Ejercicio adicional con otra columna del df
# El GET con el bypass de seguridad que ya probamos que te funciona
r = requests.get(url_retail, timeout=15, verify=False)
if r.status_code == 200:
# En esta API, los productos vienen dentro de una 'llave' llamada 'products'
json_recibido = r.json()
df = pd.json_normalize(json_recibido['products'])
print(f"✅ ¡CONEXIÓN EXITOSA!")
print(f"📊 Se han descargado {len(df)} productos de retail.")
# Mostramos los resultados
print("\nTabla de productos obtenida:")
print(df[['product_name', 'brands']].head()) # Mostramos nombre y marca
else:
print(f"❌ Error del servidor: {r.status_code}")
except Exception as e:
print(f"🚨 Error: {e}")
Conectando a: ,product_name,brands,price...
✅ ¡CONEXIÓN EXITOSA!
📊 Se han descargado 20 productos de retail.
Tabla de productos obtenida:
product_name brands
0 Kiri carré 8p Kiri
1 crème cuisson Jaouda
2 Crempro gastro mixte
3 Crème sous pression à la vanille 250g Isigny Sainte-Mère
4 La crème des chefs ferme et onctueuse gastrono... President
conteo_marcas = df['brands'].value_counts()
print("Top de marcas en el inventario:")
print(conteo_marcas.head())
Top de marcas en el inventario:
brands
Bridélice 4
Jaouda 2
Kiri 1
gastro mixte 1
Isigny Sainte-Mère 1
Name: count, dtype: int64
roductos_kiri = df[df['brands'] == 'Kiri']
print(productos_kiri[['product_name', 'code']])
product_name code
0 Kiri carré 8p 6111028000980
El método describe() en Pandas muestra estadísticas solo para columnas numéricas de tu DataFrame. Si solo aparecen 3 columnas, significa que solo esas columnas contienen datos numéricos. Las columnas no numéricas, como cadenas de texto, no se incluirán en el resultado. Puedes utilizar el método info() para verificar el tipo de datos de cada columna y asegurarte de que las columnas que esperas analizar son numéricas. Así podrás tomar decisiones informadas sobre cómo limpiar o transformar tus datos.
Esta es la respuesta al ejercicio
#capturar una de las columnas otro ejercicio de practica
precio_unitario=retail_data['UnitPrice'] print(precio_unitario[4])
print('============================================================================================================')
mean_valor=precio_unitario.mean()print('La media es: ', mean_valor)
print('============================================================================================================')
mediana_valor=precio_unitario.median()print('La mediana es: ', mediana_valor)
print('============================================================================================================')
suma_valor=precio_unitario.sum()print('La suma es: ', suma_valor)
print('============================================================================================================')
conteo_ventas_diarias=precio_unitario.count()print('La cuenta es: ', conteo_ventas_diarias)
#Contar los Nones/Nulls totales por columna
A= pd.DataFrame({'Num':[7,None,9,None,11,23,45,None]})conteo_nas =A.isna().sum()print(conteo_nas)
Genial! ahora puedo usar Python y sus bibliotecas para visualizar y operar mi data.
¿A qué hora cambió la configuración, ya casi al final de la clase, aparecen las columnas a todo lo ancho. Qué me perdí?
La diferencia es que en el primer módulo usa Print(retail_data.head())
Y al final aparece como en una especie de tabla manipulable porque la invocó directamente sin el print. Sólo poniendo retail_data.head() la diferencia es que creo que sin el print sólo te funciona en un notebook, pero no en la terminal.
¿Qué es una serie en Pandas?
En Pandas, una Serie es una estructura de datos unidimensional que puede contener datos de cualquier tipo (enteros, cadenas, flotantes, etc.). Por otro lado, los DataFrames, son una estructura bidimensional similar a una tabla en una base de datos o una hoja de cálculo de Excel o un CSV.