No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Estructuras de Datos en Pandas y Funciones

14/32
Recursos

Funciones de Resumen y Estadísticas en Pandas

Vamos a explorar algunas funciones de resumen y estadísticas que podemos utilizar con nuestro DataFrame.

Uso de describe() para obtener un resumen estadístico.

`# Resumen estadístico
summary = retail_data.describe()
print("Resumen estadístico:\\n", summary)`

Cálculo de la media y mediana.

Media:

mean_value = retail_data['Quantity'].mean()
print("Media de Quantity:", mean_value)

Mediana:

median_value = retail_data['Quantity'].median()
print("Mediana de Quantity:", median_value)

Suma y conteo de valores.

Suma:

total_sum = retail_data['Quantity'].sum()
print("Suma de Quantity:", total_sum)

Conteo de valores:


count_values = retail_data['Quantity'].count()
print("Conteo de Quantity:", count_values)

Desviación estándar y varianza.

Desviación estándar:


std_dev = retail_data['Quantity'].std()
print("Desviación estándar de Quantity:", std_dev)

Varianza

variance = retail_data['Quantity'].var()
print("Varianza de Quantity:", variance)

Mínimo, Máximo y Producto.

Mínimo:

min_value = retail_data['Quantity'].min()
print("Mínimo de Quantity:", min_value)

Máximo:

max_value = retail_data['Quantity'].max()
print("Máximo de Quantity:", max_value)

Producto:

prod_value = retail_data['Quantity'].prod()
print("Producto de Quantity:", prod_value)

Aportes 17

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me puse a iterar con las funciones en un df y me encanto. Ideal para poder categorizar mejor tus datos. ![](https://static.platzi.com/media/user_upload/image-9d2789d9-d7c0-497e-8c0a-2c053673f674.jpg)
Les dejo un código que les puede servir cuando hagan Limpieza de datos y EDA: ```js 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].index null_B = B[B.Num.isna() == True].index null_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.
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: ```js 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: ```js ## Estadísticos básicos para series o columnas determinadas: mean_value = daily_sales.mean() # Media print('La media es', mean_value) median_value = daily_sales.median() # Mediana print('La mediana es', median_value) sum_value = daily_sales.sum() # Suma print('La suma total es', sum_value) ```## Estadísticos básicos para series o columnas determinadas: mean\_value = daily\_sales.mean() # Media print('La media es', mean\_value) median\_value = daily\_sales.median() # Mediana print('La mediana es', median\_value) sum\_value = daily\_sales.sum() # Suma print('La suma total es', sum\_value)
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
\### 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: ```python 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: ```python \# 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\*\*: ```python \# Acceder a una columna específica df\['Nombre'] \# Acceder a varias columnas df\[\['Nombre', 'Edad']] ``` \- \*\*Acceder a filas\*\* (con `.loc\[]` o `.iloc\[]`): ```python \# 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\*\*: ```python \# Filtrar filas donde la edad sea mayor que 30 df\_filtrado = df\[df\['Edad'] > 30] print(df\_filtrado) ``` \#### B) \*\*Añadir, Modificar y Eliminar Columnas\*\* \- \*\*Añadir columnas\*\*: ```python df\['Salario'] = \[3000, 4000, 5000] # Añadir una nueva columna ``` \- \*\*Modificar columnas\*\*: ```python df\['Edad'] = df\['Edad'] + 5 # Incrementar la edad en 5 años ``` \- \*\*Eliminar columnas\*\*: ```python 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. ```python df\_agrupado = df.groupby('Ciudad')\['Edad'].mean() print(df\_agrupado) ``` \#### D) \*\*Operaciones de Fusión y Unión\*\* \- \*\*concat()\*\*: Para unir DataFrames vertical u horizontalmente. ```python df1 = pd.DataFrame({'A': \[1, 2], 'B': \[3, 4]}) df2 = pd.DataFrame({'A': \[5, 6], 'B': \[7, 8]}) df\_concatenado = pd.concat(\[df1, df2], axis=0) # Unión vertical ``` \- \*\*merge()\*\*: Para combinar DataFrames sobre la base de columnas o índices comunes. ```python df\_left = pd.DataFrame({'key': \['A', 'B', 'C'], 'left\_value': \[1, 2, 3]}) df\_right = pd.DataFrame({'key': \['B', 'C', 'D'], 'right\_value': \[4, 5, 6]}) df\_merge = pd.merge(df\_left, df\_right, on='key', how='inner') # Unión por 'key' print(df\_merge) ``` \#### E) \*\*Manejo de Datos Faltantes\*\* \- \*\*isnull()\*\*: Devuelve un DataFrame con valores `True` donde hay valores nulos. \- \*\*dropna()\*\*: Elimina filas o columnas con valores nulos. \- \*\*fillna()\*\*: Rellena los valores nulos con un valor específico. ```python df = pd.DataFrame({'A': \[1, None, 3], 'B': \[4, 5, None]}) \# Rellenar valores nulos df\_relleno = df.fillna(0) \# Eliminar filas con valores nulos df\_sin\_na = df.dropna() ``` \#### F) \*\*Ordenar Datos\*\* \- \*\*sort\_values()\*\*: Ordena los datos por valores de una columna. ```python df\_ordenado = df.sort\_values(by='Edad', ascending=False) print(df\_ordenado) ``` \--- \### 4. \*\*Funciones Estadísticas en Pandas\*\* 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. ```python \# Ejemplo de uso de funciones estadísticas df\['Edad'].mean() # Media de la columna 'Edad' df\['Edad'].std() # Desviación estándar df.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. **Salida**: Index(\['InvoiceNo', 'StockCode', 'Description', 'Quantity', 'InvoiceDate',        'UnitPrice', 'CustomerID', 'Country'],       dtype='object') **2) Número de Filas y Columnas**:num\_rows, num\_columns = retail\_data.shape print('Número de filas', num\_rows) print('Número de columnas', num\_columns) * **Descripción**: Obtiene el número de filas y columnas en el DataFrame retail\_data y los imprime. **Salida**: Número de filas 541909 Número de columnas 8 **3) Acceso a la Columna (Quantity)**:daily\_sales = retail\_data\['Quantity'] print(daily\_sales) print(daily\_sales\[2]) * **Descripción**: Accede a la columna Quantity del DataFrame. Imprime la columna completa y el valor en el índice 2. **Estadísticas Resumidas**:summary = retail\_data.describe() print(summary) * **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)).
`file_path = '/content/OnlineRetail.csv'sales_data = pd.read_csv(file_path, encoding='ISO-8859-1')sales_data.head()`
file\_path = '/content/OnlineRetail.csv'sales\_data = pd.read\_csv(file\_path, encoding='ISO-8859-1')sales\_data.head()
Genial! ahora puedo usar Python y sus bibliotecas para visualizar y operar mi data. ![](</Users/Lenovo/Library/Application Support/CleanShot/media/media_YwR2I5PKR9/CleanShot 2024-12-20 at 15.43.23.png>)
¿A qué hora cambió la configuración, ya casi al final de la clase, aparecen las columnas a todo lo ancho. Qué me perdí?
**¿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.
Comparto mi analisis superficial de los productos a traves del StockCode **Pasos para analizar los productos** **DataFrame de productos unicos** 1. Extraer la serie 'StockCode' 2. Aplicar metodo`.uniques()` a la serie para poder tener los productos unicos, ya que el 'StockCodes' peretenece a un registro de transacciones y el mismo producto puede estar registrado varias veces. 3. Una vez teniendo la lista de productos unicos generamos el DataFrame deporductos unicos **Producto mas veces vendido** 1. Extraer del Data Frame de productos, cuantas veces se repite cada uno utilizando el metodo `.value_counts()` obteniendo data frame con los conteos de las veces que se repiten los productos, (viene ordenado descriente por default) 2. Ordenar el nuevo data frame (si es que ya no lo esta) 3. Obtener el Stock code mas repetido utilizando la indexacion de data frame, sabiendo que ya esta ordenado de forma descendiente. `conteo_ordenado[0]` 4. luego de data frame inicial utilizar el filtrado .loc en la columna 'StockCode' con la condicion que solo mostrase los valores obtenido de #numero productosproductos=sales\_data\['StockCode']print('Dataframe de productos',productos.unique())print('longitu del dataframe que posee todos los productos transados' ,len(productos.unique()))print('Conteo de todos los productos transados',productos.count())productos\_unicos= pd.DataFrame(productos.unique())print(productos\_unicos) \# Producto mas aparece en el registroconteo\_productos = productos.value\_counts()print(conteo\_productos)#print(conteo\_productos.head())#print('tipo de dato de conteo\_productos',type(conteo\_productos))print('Forma de dato de conteo\_productos',conteo\_productos.shape)conteo\_ordenado = conteo\_productos.sort\_values(ascending=False)print('data frame de conteo ordenado',conteo\_ordenado)#print('tipo de dato de conteo\_ordenado',type(conteo\_ordenado))#print('Forma de dato de conteo\_ordenado',conteo\_ordenado.shape)print(np.all(conteo\_productos.values == conteo\_ordenado.values)) #verificacion de que los valores  son los mismos y no se han modificadoprint(conteo\_ordenado\[0])stockcode\_mas\_frecuente = conteo\_ordenado.index\[0]print(stockcode\_mas\_frecuente)fila\_mas\_frecuente = sales\_data.loc\[sales\_data\['StockCode'] == stockcode\_mas\_frecuente] print(fila\_mas\_frecuente)`conteo_ordenado[0]` obteniendo `sales_data.loc[sales_data['StockCode'] == stockcode_mas_frecuente]` ```js #numero productos productos=sales_data['StockCode'] print('Dataframe de productos',productos.unique()) print('longitu del dataframe que posee todos los productos transados' ,len(productos.unique())) print('Conteo de todos los productos transados',productos.count()) productos_unicos= pd.DataFrame(productos.unique()) print(productos_unicos) # Producto mas aparece en el registro conteo_productos = productos.value_counts() print(conteo_productos) #print(conteo_productos.head()) #print('tipo de dato de conteo_productos',type(conteo_productos)) print('Forma de dato de conteo_productos',conteo_productos.shape) conteo_ordenado = conteo_productos.sort_values(ascending=False) print('data frame de conteo ordenado',conteo_ordenado) #print('tipo de dato de conteo_ordenado',type(conteo_ordenado)) #print('Forma de dato de conteo_ordenado',conteo_ordenado.shape) print(np.all(conteo_productos.values == conteo_ordenado.values)) #verificacion de que los valores son los mismos y no se han modificado print(conteo_ordenado[0]) stockcode_mas_frecuente = conteo_ordenado.index[0] print(stockcode_mas_frecuente) fila_mas_frecuente = sales_data.loc[sales_data['StockCode'] == stockcode_mas_frecuente] print(fila_mas_frecuente) ```
```js # Ordena los datos por columna Description = retail_data.sort_values(by='Description', ascending=False) print(Description) ``````js Iput InvoiceNo StockCode Description Quantity \ 114538 546023 85175 wrongly sold sets -975 114522 546018 85172 wrongly sold as sets -600 117895 546408 22467 wrongly sold (22719) barcode 170 263884 560039 20713 wrongly marked. 23343 in box -3100 456831 575722 85123A wrongly marked carton 22804 -256 ... ... ... ... ... 535322 581199 84581 NaN -2 535326 581203 23406 NaN 15 535332 581209 21620 NaN 6 536981 581234 72817 NaN 27 538554 581408 85175 NaN 20 InvoiceDate UnitPrice CustomerID Country 114538 3/8/11 17:29 0.0 NaN United Kingdom 114522 3/8/11 17:23 0.0 NaN United Kingdom 117895 3/11/11 16:25 0.0 NaN United Kingdom 263884 7/14/11 14:27 0.0 NaN United Kingdom 456831 11/10/11 18:20 0.0 NaN United Kingdom ... ... ... ... ... 535322 12/7/11 18:26 0.0 NaN United Kingdom 535326 12/7/11 18:31 0.0 NaN United Kingdom 535332 12/7/11 18:35 0.0 NaN United Kingdom 536981 12/8/11 10:33 0.0 NaN United Kingdom 538554 12/8/11 14:06 0.0 NaN United Kingdom [541909 rows x 8 columns] ```
tengo un error leyendo este archivo UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 227179: invalid start byte por ahora debo leer otro archivo
summary = df.describe()print(summary)protein\_mean = protein.mean()print(f'la mediana es {protein\_mean}')print(f'The total sum is {protein.sum()}')print(f'numbers of values not null{protein.count()}')
![](https://static.platzi.com/media/user_upload/image-ec05597c-e38d-4240-a8ea-f216ff562764.jpg)