No tienes acceso a esta clase

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

Funciones principales de Pandas

17/24
Recursos

Hay ciertas funciones que son muy importantes y que siempre estaremos usando a la hora de hacer análisis de datos, para mayor facilidad y comprensión del DataFrame.

  • Mostrar las primeras dos líneas de registro
df_books.head(2) 
---> #muestra los primeros dos registros del dataFrame 
  • Mostrar los diferentes datos que contiene el DataFrame
df_books.info()
---> py
RangeIndex: 550 entries, 0 to 549        #numero de registro
Data columns (total 7 columns):          #total de columnas

 #   Column       Non-Null Count  Dtype  #tipos de cada columna
---  ------       --------------  -----  
 0   Name         550 non-null    object 
 1   Author       550 non-null    object 
 2   User Rating  550 non-null    float64
 3   Reviews      550 non-null    int64  
 4   Price        550 non-null    int64  
 5   Year         550 non-null    int64  
 6   Genre        550 non-null    object 
dtypes: float64(1), int64(3), object(3)
  • Obtener diferentes datos estadísticos de las columnas numéricas.
df_books.describe()
--->  User.Rating  Reviews   Price     Year
count    550       550       550       550
mean    4.618   11953.281    13.1      2014
std     0.226   11731.132    10.84     3.165
min      3.3        37         0       2009
25%      4.5      4058         7       2011
50%      4.7      8580        11       2014
75%      4.8    17253.25      16       2017
max      4.9      87841      105       2019 
  • Mostrar los últimos 5 registros del DataFrame
df_books.tail()
---> #muestra los ultimos 5 registros
  • Obtener el uso de la memoria de cada columna
df_books.memory_usage(deep=True)
--->
Index            128
Name           59737
Author         39078
User Rating     4400
Reviews         4400
Price           4400
Year            4400
Genre          36440
dtype: int64
  • Obtener cuantos datos tenemos de algo en específico
df_books['Author'].value_counts()
---> Muestra cuantos datos hay de cada autor
  • Eliminar registros duplicados
df_books.drop_duplicates()
  • Ordenar los registros según valores de la columna (orden ascendente)
df_books.sort_values('Year')
---> #ordena los valores de menor a mayor segun el año
  • Ordenar los registros según valores de la columna (orden descendente)
df_books.sort_values('Year', ascending=False)
---> #ordena los valores de mayor a menor segun el año

Reto

En este artículo de Pandas podrás encontrar las funciones más usadas

  • Carga un DataSet de tu preferencia e implementa estas funciones y cuéntanos cuál te ha parecido más interesante

Contribución creada por: Edward Giraldo.

Aportes 74

Preguntas 5

Ordenar por:

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

Funciones principales de Panadas 🐼

.head() → trae los primeros datos
.info() → Columnas, indices, cuales noson nulos, tipo de dato que maneja
.describe() → Solo de las columnas numericas me arroja datos estadisticos [ media,max,miun,mediana,etc ]
.memory_usage() → memoria utilizada
.value_counts() → cuenta valores de una columna
.drop_duplicates() → elimina los valores repetidos
.sort_values( columna para ordenar ) → Se puede ordenar de forma descendiente con la bandera ascending=False


Extras 👇🏻

···· Probando el drop_duplicate

  1. Duplicamos valores
    ···

    ···
    2 Elimando los duplicados
    ···

    👆🏻 Importante lo iltimo [El drop solo, lo elimina en forma visual]
    ···
    👇🏻 Si quieren eliminarlo completamente del DF
    ···

    ···
    Dt extra del extra 😃
    ···
    Si quieren mantener una copia tiene que usar keep=
    ···

Re laaarga pero espero que les sirva [AL FINAL DEL CURSO subo el Notion y G colab por si lo quieren]

Una función que me gusta utilizar con los datos y saber si un feature se encuentra ligeramente sesgado o no, es usando el método skew() de pandas

csv['User Rating'].skew()
>> -1.5075394905940473

Hola,para quienes no les funciono la siguiente función porque estará deprecada, abajo dejo una alternativa

df_books.append(df_book.iloc[0])

el siguiente codigo funciona para concatenar una fila a un dataframe:

pd.concat([df_books,df_books.iloc[0].to_frame().T])

Tomé este reto personal, de hecho paré el curso unos días por ello. Hice algo sencillo con la mayoría de las funciones y métodos vistos en clase, y lo mejor de todo es que durante el desarrollo de mi reto dejé unos fun facts un tanto curiosos y divertidos, bueno, espero les gusten.

Contenido de Cafeína en Bebidas

Una función interesante puede ser groupby en unión con size. En este caso quise responder a la pregunta ¿Cuántos libros son ficción?

df.groupby('Genre').size()

Genre
Fiction 240
Non Fiction 311
dtype: int64

Funciones principales de Pandas

  • Mostrar las primeras dos lineas de registro
import pandas as pd
df_books = pd.read_csv('bestsellers-with-categories.csv', sep=',', header=0)
df_books.head(2) ---> #muestra los primeros dos registros del dataFrame 
  • Mostrar los diferentes datos que contiene el dataFrame
df_books.info()
---> 
RangeIndex: 550 entries, 0 to 549        #numero de registro
Data columns (total 7 columns):          #total de columnas
 #   Column       Non-Null Count  Dtype  #tipos de cada columna
---  ------       --------------  -----  
 0   Name         550 non-null    object 
 1   Author       550 non-null    object 
 2   User Rating  550 non-null    float64
 3   Reviews      550 non-null    int64  
 4   Price        550 non-null    int64  
 5   Year         550 non-null    int64  
 6   Genre        550 non-null    object 
dtypes: float64(1), int64(3), object(3)
memory usage: 30.2+ KB
  • Obtener diferentes datos estadisticos de las columnas numericas.
df_books.describe()
--->  User.Rating  Reviews   Price     Year
count    550       550       550       550
mean    4.618   11953.281    13.1      2014
std     0.226   11731.132    10.84     3.165
min      3.3        37         0       2009
25%      4.5      4058         7       2011
50%      4.7      8580        11       2014
75%      4.8    17253.25      16       2017
max      4.9      87841      105       2019 
  • Mostrar los ultimos 5 registros del dataFrame
df_books.tail()
---> #muestra los ultimos 5 registros
  • Obtener el uso de la memoria de cada columna
df_books.memory_usage(deep=True)
--->
Index            128
Name           59737
Author         39078
User Rating     4400
Reviews         4400
Price           4400
Year            4400
Genre          36440
dtype: int64
  • Obtener la informacion de un registro especifico
df_books.iloc[0]
---> #obtiene la informacion del registro con indice 0
Name           10-Day Green Smoothie Cleanse
Author                              JJ Smith
User Rating                              4.7
Reviews                                17350
Price                                      8
Year                                    2016
Genre                            Non Fiction
Name: 0, dtype: object
  • Eliminar registros duplicados
df_books.drop_duplicates()
  • Elimina el primer registro duplicado del dataFrame (orden ascendente)
df_books.drop_duplicates(keep='last')
  • Ordenar los registros segun valores de la columna (orden ascendente)
df_books.sort_values('Year')
---> #ordena los valores de menor a mayor segun el año
  • Ordenar los registros segun valores de la columna(orden descendente)
df_books.sort_values('Year', ascending=False)
---> #ordena los valores de mayor a menor segun el año

Esta clase ES lo que se pide en una prueba técnica. A PRACTICAR SE HA DICHO!

Actualmente no se puede emplear append, por lo que para duplicar una fila expongo la mejor v’ia a mi entender utilizando . concat de pandas.
mi base de datos se llama books, a continuacion el codigo:

row = books.iloc[0]
books3 = pd.concat([books,row.to_frame().T], ignore_index = True)

usando’ to_frame().T 'se convierte en un DataFrame de una sola fila
El argumento 'ignore_index=True 'se utiliza para reasignar índices a las filas en el nuevo DataFrame


Esta sentencia me permite ver los registros que tengan la palabra clave que desee buscar

Descargué el dataset de los registros de tiroteos masivos en USA durante el periodo 2019-2022 y apliqué las principales funciones que hemos aprendido en esta clase. Y la que me fue más útil fue .value_counts(), ya que me permitía saber la frecuencia de los datos de una columna y de esta manera pude registrar en que Estado o Ciudad había sucedido la mayoría de estos terribles acontecimientos.

Link: https://github.com/CarlosFOL/Mass_shootings_USA

Un pequeño aporte por si desean ordenar por más de un campo y eligiendo si es en orden ascendente o descendente:

df_books.sort_values(["Año","Autor"],ascending=[False,True])

Las funciones ISIN y WHERE son muy útiles en mi opinión.
Si trabajamos con los autores del dataframe de la clase. Vemos la ocurrencia de cada autor.

df_books = pd.read_csv('/content/VIDEO 12 bestsellers-with-categories.csv',sep=',',header=0)
df_books['Author'].value_counts()

Jeff Kinney 12
Gary Chapman 11
Rick Riordan 11
Suzanne Collins 11
American Psychological Association 10

Keith Richards 1
Chris Cleave 1
Alice Schertle 1
Celeste Ng 1
Adam Gasiewski 1
Name: Author, Length: 248, dtype: int64

Con ISIN podemos filtrar el dataframe para tener un dataframe de determinados autores.

df_books[df_books.Author.isin(['Adam Gasiewski','Celeste Ng','Alice Schertle','Chris Cleave'])]

WHERE dada una condición asigna determinado valor a los registros que no lo cumplen.
Para nuestro caso los registros que no tienen estos autores en la columna de autores les asignamos el valor otros autores.

newdf = df_books.where(df_books.Author.isin(['Jeff Kinney','Gary Chapman','Rick Riordan','Suzanne Collins']),'otros autores')

Entonces ahora tenemos un dataframe con 4 autores diferenciados de los demas. Si queremos hacer estadisticas con respecto al resto.

newdf['Author'].value_counts()

otros autores 505
Jeff Kinney 12
Suzanne Collins 11
Rick Riordan 11
Gary Chapman 11
Name: Author, dtype: int64

Otra función que uso mucho es la de df.sample(#), con ella puedo validar una muestra aleatoria del dataset para hacerme una idea del contenido, por ejemplo para nuestro caso del dataframe de libros tenemos:

df_books.sample(10)
>>>

Mis apuntes #18 (Notion + Notas de Cornell)

Algo que me sirvió a mí para duplicar una fila en el DataFrame utilizando el método concat de Pandas en lugar del método append (que al parecer esta quedando obsoleto):

duplicado = df_books.iloc[:1]
df_books = pd.concat([df_books, duplicado)])
df_books

El metodo combine_first() esta muy interesante ya que toma dos dataframes y completa los valores que hacen falta con el otro (el dataFrame que uno elija primero). Aqui un ejemplo


Resultado!!

Si quieren renombrar una Columna por que convirtieron o modificaron los datos pueden usar la funcion “.rename”

df.rename(columns={"old_column_name":"name_column _name"})

Ojalá pudieran ir a ver mi proyecto personal y dejarme comentarios y sugerencias, lo hice en horas de la tarde solo viendo los apuntes de las clases pasadas. Ojalá lo pueda ver el profesor también. Gracias

https://colab.research.google.com/drive/1iKQlusVQgYpTsfahZz7HX6nNqI7N_anH?usp=sharing

Saludos
Al ejecutar la función append:

AttributeError: ‘DataFrame’ object has no attribute ‘append’

Ahora se recomienda: concat

Esto es 100% verídico o depende de que?

`books.groupby('Name')[['User Rating’,'Price']].mean()` Con este comando podemos agrupar informacion de nuestro DataFrame por una de las columnas, y calcular el promedio de otras columnas, para cada una de las agrupaciones realizadas. Por ejemplo, agrupamos por autores y sacamos un promedio del Rating y los precios de libros por cada autor, lo que nos permite saber el promedio de rating de cada uno de los autores y el promedio de precios de cada uno de sus libros. ![](https://static.platzi.com/media/user_upload/image-677319e7-96b8-4bc5-a5d7-117ccac2d8f4.jpg)
2024 Version 2.0 Pandas# Selecciona la primera fila del DataFrame first\_row = df\_books.iloc\[0] # Concatena el DataFrame con la primera fila df\_books = pd.concat(\[df\_books, first\_row.to\_frame().T]) En esta actualizacion ya no se encuentra disponible el atributo '.append'. minuto 7:02 ```js # Selecciona la primera fila del DataFrame first_row = df_books.iloc[0] # Concatena el DataFrame con la primera fila df_books = pd.concat([df_books, first_row.to_frame().T]) ```
me pueden ayudar con este error, no me deja hacer ningun Append. ![](https://static.platzi.com/media/user_upload/image-643b45ce-bce3-4847-a2de-213fb177c2b2.jpg)
Al momento de ver este video me encuentro que Pandas ya no usa la función 'append'. La solución que sugieren en las librerías es convertirla en data frame y usar la función 'concat'. Quedó de la siguiente forma: ![](https://static.platzi.com/media/user_upload/image-8ac60a90-5abc-45cd-ba01-1221dcf3776f.jpg) ![](https://static.platzi.com/media/user_upload/image-50db033d-5ec4-4ae6-aba5-8bbf27a7f14b.jpg)
en la nueva actualización en la sesión de recursos de la clase no aparece anda, siempre me toca ir a la versión anterior para poder ver lo que encuentro en los recursos

DataFrame.apply()

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html

Este método me parece muy útil, debes llamarlo con una función como parámetro que reciba al menos un parámetro. EL parámetro que se le pasa a tu función es un pd.Series por columna si lo llamas sobre el datafram o cada valor en el pd.Series si lo llamas desde el pd.Series (o una columna)

Aquí les pongo un ejemplo

import pandas as pd

# Lee el csv de libros bestsellers desde platzi
df_best_sellers = pd.read_csv(
    "https://static.platzi.com/media/public/uploads/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv"
)
# Aplica a cada dato en la columna User rating la función lambda que
# Convierte a una calificación base 100 y la guarda en una nueva columna
df_best_sellers["Rating base 100"] =\
    df_best_sellers["User Rating"].apply(lambda rate: 100*rate/5)
# Imprime la nueva columna
print(df_best_sellers["Rating base 100"])

Además de la función describe, se puede consultar el valor estadístico en cuestión para cada columna individualmente:

Para ordenar por el index sería de la siguiente manera.

df_books.sort_index().head(4)

Funciones como “describe” o “value_counts” dan resultado tal cual en el editor que está usando el profesor. Para que el programa haga lo esperado otros editores como VS Code o en la terminal directamente, hay que asignarlo a un objeto, y luego hacer print.
e. j. df_booksdesc=df_books.describe()
print(df_booksdesc)

Podemos hacer consultas con Pandas e incluso llevar nuestros Data Frames a una base de datos SQL, a un archivo CSV, Excel, etc.

.append ya no esta deben usar pd.concat

df_books = pd.concat([df_books,df_books])

The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.

Una función muy util de pandas es .isin() permite hacer un filtrado de múltiples valores sobre una columna sin escribir múltiples sentencias su sintaxis serías la sigueinte:

df[df[columns_name].isin([val1,val,2…,valn])]

df[df[columns_name].isin([val1,val,2....,valn])]

también puede utilizarse como:

criterios = [val1,vla2,...,valn]
df[df[columns_name].isin(criterios)]

Filtre en Kaggle un data base de etapas ganadas por ciclistas y use una funcion llamada isin para encontrar si habia ciclistas colombianos que ganaron alguna etapa.

df_ciclyng[df_ciclyng["Winner_Country"].isin(["COL"])]

Utilice el método .corr() para estimar la correlación de la variables númericas del ejemplo (utilizando por defecto el coeficiente de Pearson):

books_num_data = df_books.iloc[:,2:6]
corr_data = books_num_data.corr()
corr_data

Resultado:

	User Rating	Reviews	Price	Year
User Rating	1.000000	-0.001729	-0.133086	0.242383
Reviews	-0.001729	1.000000	-0.109182	0.263560
Price	-0.133086	-0.109182	1.000000	-0.153979
Year	0.242383	0.263560	-0.153979	1.000000

Entendiendo como funciona este coeficiente al parecer hay poca correlación entre las variables de user rating, reviews, price y year. O me imagino que por las magnitudes de variables como user rating sea necesario hacer una normalización de sus valores. Agradezco comentarios.

Muy buena clase, muy buenos aportes. A practicar, porque así es como interiorizamos lo aprendido. Gracias profe.

Hallazgos:

  • En ocasiones, cuando cargamos archivos de Kaggle y ponemos el parámetro sep = ' , ' no funciona
    Para solucionar esto se pone sep = ' ; '

.

  • También podemos poner una columna como index con .set_idex(#nombre de la columna)

👾

Esta te ayuda a ordenar por filas o columnas dependiendo del axis ``` df\_books.sort\_index(axis=0, ascending=False) ```
Para los nuevos que obtienen error al usar df.append(), en pandas se cambió a df.\_append()
Del dataset en Kaagle, student\_performance\_data, he aumentado una columna la desviación con respecto al promedio de la calificación de cada estudiante, con esto se puede ver cuáles estudiantes están por encima de la media y cuáles por debajo. `df_student['desv_mean_GradeClass'] = df_student['GradeClass'] - df_student['GradeClass'].mean()` ![](https://static.platzi.com/media/user_upload/image-44b1aaf5-dc1e-45be-baaa-5ad91b7987cb.jpg)![]()
Para ordenar de manera descendente primero por año y luego por opinión de usuario, se puede utilizar el siguiente código: `df_books1.sort_values(by=['Year', 'User Rating'], ascending=[False, False])` ![]()![](https://static.platzi.com/media/user_upload/image-c66ebec9-2075-4a4a-99a3-13c40f36885b.jpg)![]()
se pueden anidar funciones df\_best\_sellers\[df\_best\_sellers\["Genre"] == "Non Fiction"].sort\_values("User Rating" , ascending  =  False ) ```js df_best_sellers[df_best_sellers["Genre"] == "Non Fiction"].sort_values("User Rating" , ascending = False ) ```
Hola a todos! A mi no me está funcionando append. Por lo tanto estoy usando concat. Para poder aplicar el drop\_duplicates he tenido que hacer lo siguiente: ```python df_books_registro1 = df_books.iloc[0] df_books_registro1 = df_books_registro1.to_frame().T df_books = pd.concat([df_books, df_books_registro1], ignore_index=True) df_books.drop_duplicates() ```
Les comparto la cantidad de Pokémon que existe de cada tipo según Pandas ![](https://static.platzi.com/media/user_upload/image-5d71a315-d6a7-4254-be79-0f42f155fe85.jpg) ![](https://static.platzi.com/media/user_upload/image-f37a53c4-764e-4d44-a1aa-4aedb137f0d0.jpg) Para esto descargué una base de datos de Kaggle donde encontré que aparecían clasificados por tipo 1 y 2 y uní estas dos columnas por el método concat ```js tipos_pokemon = pd.concat([df_pokemon['type_1'], df_pokemon['type_2']]) conteo_tipos = tipos_pokemon.value_counts() print(conteo_tipos) ```
Entré a Kaggel y encontré una base de datos de Pokémon Me puse a trabajar con ella y con describe() me di cuenta de que varía mucho la media de contra qué es débil o fuerte cada tipo. Con datos en mano, compañeros, puedo afirmarles que los tipos menos rentables son Hielo y Roca 😔 ![](https://static.platzi.com/media/user_upload/image-31a538e0-0a25-44ac-b7be-7e248e2bd078.jpg) Le dejo mis datos. ![](https://static.platzi.com/media/user_upload/image-a71016df-b883-4e09-abb0-6ddf448e6675.jpg)
Entré a Kaggel y encontré una base de datos de Pokémon ![](https://static.platzi.com/media/user_upload/image-2a4cc2b4-17c7-451a-ae03-40c9e298a804.jpg) Me puse a trabajar con ella y con describe() me di cuenta de que varía mucho la media de contra qué es débil o fuerte cada tipo. Con datos en mano, compañeros, puedo afirmarles que los tipos menos rentables son Hielo y Roca 😔 Le dejo mis datos. ![]()![](https://static.platzi.com/media/user_upload/image-cdff2c0a-fd06-455f-a317-6a6402a2fc0c.jpg) ![](https://static.platzi.com/media/user_upload/image-627378d8-96fd-4255-99fe-1b6d0ee00e7a.jpg)

Utilize la función .plot() pero aún no se bien cómo puedo graficar solo una variable.

Esta es una gráfica de variables climáticas.

Me gusto esta clase para aprender las funciones para realizarlas como programador de ciencia de datos. Aqui esta el reto:
![](

Genial…!

Deprecado ¿?

  • deprecated => obsoleto, discontinuado
    Informática: En muchos casos es un indicador que recomienda el abandonar el uso de un atributo o funcionalidad de un sistema para evitar riesgos de futuras fallas técnicas.

  • deprecar en español => Suplicar, pedir con insistencia

me sirvio muchisimo para un pequeño analisis que estaba haciendo para mi doctorado en fisica atmosferica. dejo el link del notebook:
https://deepnote.com/workspace/martin-miguel-freire-ef26ec77-71e8-4f22-83e0-482037b3f9a7/project/Martin-Miguel-Freire-Freires-Untitled-project-a06fb186-2238-4538-8c99-67b5ce357472/notebook/max_min_temps-b33540031d134ca7a69f1bf9b2dbc058

Dado un archivo de 2 columnas fecha/hora y valores de temperatura busca la temperatura maxima y minima diaria y devuelve solo dichos valores. una ventaja enorme respecto a mi solucion anterior usando excel.

Si ustedes quieren acceder a una columna específica, pueden:

df.Author.value_counts()

Así se ahorran el escribir el

df['Columna']

Si tienes la versión 2.0.1 de pandas, ya no te dejara usar el metodo “append” para agregar filas a tus dataframes, dejo un link para que sepas porque:
https://stackoverflow.com/questions/70837397/good-alternative-to-pandas-append-method-now-that-it-is-being-deprecated

Ahora, para agregar nuevas filas al dataframe tendremos que usar el metodo pd.concat()

df_heroes.memory_usage(deep=False)

De esta forma podemos convertir el tipo de dato de la columna “Genre” en categoria. Pasando de “object” a “category”.

Complemento, el método value_counts() puede ser complementado con el método head()… Ejemplo, quiero conocer el top 5 de autores con más libros:

df_books[“Author”].value_counts().head(5)

17. Funciones principales de pandas

import pandas as pd

df_books = pd.read_csv('/content/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv')
df_books.head(2) #traer los n primeros registros de mi notebook

df_books.info() # informe detallado del dataset

df_books.describe() # de las columnas numéricas me da los principales datos estadísticos

df_books.tail(2) # ultimos n datos del dataset

df_books.memory_usage(deep=True) # Me dice cuanta memoria estoy utilizando con mi data frame por columnas

df_books['Author'].value_counts() # Cuenta los datos por categoría de columna que le indique

df_books.iloc[0] #información de la colummna 0

df_books.drop_duplicates() # borra los duplicados 

df_books.sort_values('Year',ascending=False) # Ordena las columnas según la columna que yo le indique

Esta función me parece interesante:
Podemos ver los últimos 4 registros son iguales, lo único que los diferencia es la columna de Year

Si quisieramos eliminar los registros duplicados, SIN tener en cuenta la columna YEAR, podemos utilizar el siguiente comando:

df = df_books.drop_duplicates(subset=['Name', 'Author', 'User Rating', 'Reviews', 'Price',  'Genre'], keep='first')
  • Reto

En este artículo de Pandas podrás encontrar las funciones más usadas
Carga un DataSet de tu preferencia e implementa estas funciones y cuéntanos cuál te ha parecido más interesante

  • Data source: world_population.csv (Kaggle)
import numpy as np
import pandas as pd

df = pd.read_csv('/content/world_population.csv', sep=',', header=0)

print('--- info ---')
print(df.info())

--- info ---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 234 entries, 0 to 233
Data columns (total 17 columns):
 #   Column                       Non-Null Count  Dtype  
---  ------                       --------------  -----  
 0   Rank                         234 non-null    int64  
 1   CCA3                         234 non-null    object 
 2   Country/Territory            234 non-null    object 
 3   Capital                      234 non-null    object 
 4   Continent                    234 non-null    object 
 5   2022 Population              234 non-null    int64  
 6   2020 Population              234 non-null    int64  
 7   2015 Population              234 non-null    int64  
 8   2010 Population              234 non-null    int64  
 9   2000 Population              234 non-null    int64  
 10  1990 Population              234 non-null    int64  
 11  1980 Population              234 non-null    int64  
 12  1970 Population              234 non-null    int64  
 13  Area (km²)                   234 non-null    int64  
 14  Density (per km²)            234 non-null    float64
 15  Growth Rate                  234 non-null    float64
 16  World Population Percentage  234 non-null    float64
dtypes: float64(3), int64(10), object(4)
memory usage: 31.2+ KB
None

print('--- describe ---')
print(df.describe())

--- describe ---
             Rank  2022 Population  2020 Population  2015 Population  \
count  234.000000     2.340000e+02     2.340000e+02     2.340000e+02   
mean   117.500000     3.407441e+07     3.350107e+07     3.172996e+07   
std     67.694165     1.367664e+08     1.355899e+08     1.304050e+08   
min      1.000000     5.100000e+02     5.200000e+02     5.640000e+02   
25%     59.250000     4.197385e+05     4.152845e+05     4.046760e+05   
50%    117.500000     5.559944e+06     5.493074e+06     5.307400e+06   
75%    175.750000     2.247650e+07     2.144798e+07     1.973085e+07   
max    234.000000     1.425887e+09     1.424930e+09     1.393715e+09   

       2010 Population  2000 Population  1990 Population  1980 Population  \
count     2.340000e+02     2.340000e+02     2.340000e+02     2.340000e+02   
mean      2.984524e+07     2.626947e+07     2.271022e+07     1.898462e+07   
std       1.242185e+08     1.116982e+08     9.783217e+07     8.178519e+07   
min       5.960000e+02     6.510000e+02     7.000000e+02     7.330000e+02   
25%       3.931490e+05     3.272420e+05     2.641158e+05     2.296142e+05   
50%       4.942770e+06     4.292907e+06     3.825410e+06     3.141146e+06   
75%       1.915957e+07     1.576230e+07     1.186923e+07     9.826054e+06   
max       1.348191e+09     1.264099e+09     1.153704e+09     9.823725e+08   

       1970 Population    Area (km²)  Density (per km²)  Growth Rate  \
count     2.340000e+02  2.340000e+02         234.000000   234.000000   
mean      1.578691e+07  5.814494e+05         452.127044     1.009577   
std       6.779509e+07  1.761841e+06        2066.121904     0.013385   
min       7.520000e+02  1.000000e+00           0.026100     0.912000   
25%       1.559970e+05  2.650000e+03          38.417875     1.001775   
50%       2.604830e+06  8.119950e+04          95.346750     1.007900   
75%       8.817329e+06  4.304258e+05         238.933250     1.016950   
max       8.225344e+08  1.709824e+07       23172.266700     1.069100   

       World Population Percentage  
count                   234.000000  
mean                      0.427051  
std                       1.714977  
min                       0.000000  
25%                       0.010000  
50%                       0.070000  
75%                       0.280000  
max                      17.880000  
  • Ordenación del df por Densidad de población por $Km^2$, en orden descendente y mostrar los 10 primeros (top ten)
print('--- top ten máxima densidad de población ---')
df_dens_pop=df.sort_values('Density (per km²)', ascending=False) 
df_dens_pop.head(10)

Resultado:

index Rank CCA3 Country/Territory Capital Continent 2022 Population 2020 Population 2015 Population 2010 Population 2000 Population 1990 Population 1980 Population 1970 Population Area (km²) Density (per km²) Growth Rate World Population Percentage
119 167 MAC Macau Concelho de Macau Asia 695168 676283 615239 557297 431896 350227 245332 247284 30 23172.2667 1.0125 0.01
134 217 MCO Monaco Monaco Europe 36469 36922 36760 33178 32465 30329 27076 24270 2 18234.5 0.9941 0.0
187 113 SGP Singapore Singapore Asia 5975689 5909869 5650018 5163590 4053602 3022209 2400729 2061831 710 8416.4634 1.0058 0.07
89 104 HKG Hong Kong Hong Kong Asia 7488865 7500958 7399838 7132438 6731195 5838574 4978544 3955072 1104 6783.3922 0.9992 0.09
76 219 GIB Gibraltar Gibraltar Europe 32649 32709 32520 31262 27741 27317 28734 26685 6 5441.5 0.9994 0.0
15 154 BHR Bahrain Manama Asia 1472233 1477469 1362142 1213645 711442 517418 362595 222555 765 1924.4876 1.0061 0.02
123 174 MDV Maldives Malé Asia 523787 514438 435582 361575 282507 224957 164887 123243 300 1745.9567 1.0045 0.01
125 173 MLT Malta Valletta Europe 533286 515357 456579 418755 399212 365392 333587 315414 316 1687.6139 1.0124 0.01
188 214 SXM Sint Maarten Philipsburg North America 44175 43621 40205 33034 30489 27845 12243 6260 34 1299.2647 1.003 0.0
22 206 BMU Bermuda Hamilton North America 64184 64031 63144 63447 61371 57470 53565 52019 54 1188.5926 1.0 0.0

Cielos!!!. Todos estos territorios tienen limitado su crecimiento geográfico y una alta renta per cápita (para saberlo, realmente, tendría que cruzar datos con otro datasource de renta per cápita por paises en un período semejante). Pero es sorprendente, NO HAY NI UN PAÍS o TERRITORIO SUBDESARROLADO!!!

Rentas per cápita (en 2021)

País Renta per cápita e 2021 (USD)
Macao 43.873,59
Mónaco ‌234.315,46
Singapur 72.794,00
Hong Kong 49.800,54
Gibraltar 64.000,00
Bahrein 26.562,97
Maldivas 10.366,29
Malta 33.486,67
Sint Maarten 28.988,26 ‌
Bermudas 114.090,30
EEUU 70.248,60
UE 38.411,10
Alemania 51.203,60
Mundo 12.236,60
Colombia 6.104,10
España 30.103,50

Los datos son del Banco Mundial, exceptuando Gibraltar (encontrado en otra fuente).

Solo está por debajo de la rpc (renta per cápita) mundial Maldivas

  • Añadir la renta per cápita al df anterior (top ten densidad población)
df_top10 = df_dens_pop.head(10)
rpc = [43873.59, 234315.46, 72794.00, 49800.54, 64000.00, 26562.97, 10366.29, 33486.67, 28988.26, 114090.30]

df_top10 ['rpc'] = rpc

df_top10

Resultado:

index Rank CCA3 Country/Territory Capital Continent 2022 Population 2020 Population 2015 Population 2010 Population 2000 Population 1990 Population 1980 Population 1970 Population Area (km²) Density (per km²) Growth Rate World Population Percentage rpc
119 167 MAC Macau Concelho de Macau Asia 695168 676283 615239 557297 431896 350227 245332 247284 30 23172.2667 1.0125 0.01 43873.59
134 217 MCO Monaco Monaco Europe 36469 36922 36760 33178 32465 30329 27076 24270 2 18234.5 0.9941 0.0 234315.46
187 113 SGP Singapore Singapore Asia 5975689 5909869 5650018 5163590 4053602 3022209 2400729 2061831 710 8416.4634 1.0058 0.07 72794.0
89 104 HKG Hong Kong Hong Kong Asia 7488865 7500958 7399838 7132438 6731195 5838574 4978544 3955072 1104 6783.3922 0.9992 0.09 49800.54
76 219 GIB Gibraltar Gibraltar Europe 32649 32709 32520 31262 27741 27317 28734 26685 6 5441.5 0.9994 0.0 64000.0
15 154 BHR Bahrain Manama Asia 1472233 1477469 1362142 1213645 711442 517418 362595 222555 765 1924.4876 1.0061 0.02 26562.97
123 174 MDV Maldives Malé Asia 523787 514438 435582 361575 282507 224957 164887 123243 300 1745.9567 1.0045 0.01 10366.29
125 173 MLT Malta Valletta Europe 533286 515357 456579 418755 399212 365392 333587 315414 316 1687.6139 1.0124 0.01 33486.67
188 214 SXM Sint Maarten Philipsburg North America 44175 43621 40205 33034 30489 27845 12243 6260 34 1299.2647 1.003 0.0 28988.26
22 206 BMU Bermuda Hamilton North America 64184 64031 63144 63447 61371 57470 53565 52019 54 1188.5926 1.0 0.0 114090.3

Para poder comparar creamos un nuevo df:


paises = ['EEUU', 'UE', 'Alemania', 'Mundo', 'Colombia', 'España']
rpcs  = [70248.60, 38411.10, 51203.60, 12236.60, 6104.10, 30103.50]

dfc = pd.DataFrame()

dfc['Pais'] = paises
dfc['RPC'] = rpcs

dfc

Resultado:

index Pais RPC
0 EEUU 70248.6
1 UE 38411.1
2 Alemania 51203.6
3 Mundo 12236.6
4 Colombia 6104.1
5 España 30103.5
print('--- top ten mayores que los países de comparación ---')
for i in range(len(df_top10)):
    for j in range(len(dfc)):
      if (dfc.iloc[j]['RPC'] < df_top10.iloc[i]['rpc'])*1==1:
          print(df_top10.iloc[i]['Country/Territory'], df_top10.iloc[i]['rpc'], ' > ',
                dfc.iloc[j]['Pais'], dfc.iloc[j]['RPC'])`

--- top ten mayores que los países de comparación ---
Macau 43873.59  >  UE 38411.1
Macau 43873.59  >  Mundo 12236.6
Macau 43873.59  >  Colombia 6104.1
Macau 43873.59  >  España 30103.5
Monaco 234315.46  >  EEUU 70248.6
Monaco 234315.46  >  UE 38411.1
Monaco 234315.46  >  Alemania 51203.6
Monaco 234315.46  >  Mundo 12236.6
Monaco 234315.46  >  Colombia 6104.1
Monaco 234315.46  >  España 30103.5
Singapore 72794.0  >  EEUU 70248.6
Singapore 72794.0  >  UE 38411.1
Singapore 72794.0  >  Alemania 51203.6
Singapore 72794.0  >  Mundo 12236.6
Singapore 72794.0  >  Colombia 6104.1
Singapore 72794.0  >  España 30103.5
Hong Kong 49800.54  >  UE 38411.1
Hong Kong 49800.54  >  Mundo 12236.6
Hong Kong 49800.54  >  Colombia 6104.1
Hong Kong 49800.54  >  España 30103.5
Gibraltar 64000.0  >  UE 38411.1
Gibraltar 64000.0  >  Alemania 51203.6
Gibraltar 64000.0  >  Mundo 12236.6
Gibraltar 64000.0  >  Colombia 6104.1
Gibraltar 64000.0  >  España 30103.5
Bahrain 26562.97  >  Mundo 12236.6
Bahrain 26562.97  >  Colombia 6104.1
Maldives 10366.29  >  Colombia 6104.1
Malta 33486.67  >  Mundo 12236.6
Malta 33486.67  >  Colombia 6104.1
Malta 33486.67  >  España 30103.5
Sint Maarten 28988.26  >  Mundo 12236.6
Sint Maarten 28988.26  >  Colombia 6104.1
Bermuda 114090.3  >  EEUU 70248.6
Bermuda 114090.3  >  UE 38411.1
Bermuda 114090.3  >  Alemania 51203.6
Bermuda 114090.3  >  Mundo 12236.6
Bermuda 114090.3  >  Colombia 6104.1
Bermuda 114090.3  >  España 30103.5

Ups…
Está claro que no podemos asociar la mayor densidad de población, con una menor renta per cápita … 😉

Lo más interesante de explorar datos es, a veces, que los resultados son insospechados, a priori

Solía usar mucho comandos en la terminal Linux para procesar datos: grep, sort, awk, uniq, head, tail,cat, etc.. muchas veces tenía que llevarlos a OpenOffice calc o excel para procesarlos mejor pero siempre con la limitante de la memoria... Gracias a Dios existe pandas, qué maravilla.

Puedes conectar un data set a Google Colab con la API de de Kaggle con este tutorial de Cristian Orlando:

Link

Utilice este data set:

https://www.kaggle.com/datasets/danieleduardofajardo/colombia-house-prediction

Trabaje en este Notebook:

https://colab.research.google.com/drive/1RNMNP25U_vCp3d9KlDyvrMsKlTxPcTnU?usp=sharing

Emplee el método “isna()” que genera una mascara boolean de los valores tipo NaN, al combinarlo con “value_counts()” podemos ver la cantidad de valores de tipo NaN en una columna. Si se valida un valor NaN arrojará True:

df_2["area"].isna().value_counts()

False    145528
True         24
Name: area, dtype: int64

Las funciones son muy variadas y hay muchas posibilidades.

Principales métodos de Pandas

  • head() → permite mostrar los primeros valores del df
  • info() → nos brinda la informacion de cantidad de datos nulos y tipos de datos por columnas
  • describe() → nos brinda datos estadísticos de las columnas numéricas
  • tail() → muestra los últimos valores del df
  • memory_usage(deep=True) → muestra el consumo de memoria de las columnas del df
  • col.value_counts() → cuenta los valores distintos de la columna
  • drop_duplicates() → borra los datos duplicados
  • sort_values(col) → ordena el dataframe de acuerdo a la columna, admite el parametro ascending (True si queremos ordenar de manera ascendente y False si queremos hacerlo descendente)

to_excel function

Libros de no ficción:

df_NonFictionBooks = df_books[df_books['Genre']=='Non Fiction']

Guardar un dataframe en formato Excel:

df_NonFictionBooks.to_excel('NonFictionBooks.xlsx', sheet_name='books')

df_books.sort_values(‘Year’, ascending = False)

Me ha pasado lo siguiente con la funcion .append:

The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.

parece que el nuevo append en pandas será .concat

Información resumida de esta clase
#EstudiantesDePlatzi

  • Con la función info puedo obtener un resumen de como esta compuesto mi dataset, es una buena idea iniciar con está función al analisar nuestros datos

  • Con la función describe puedo saber cierta información estadística, solamente de nuestros datos numéricos. Esto es muy usado en la ciencia de datos

  • La función head me retorna los primeros registros que yo especifique y la función tail me retorna los ultimos registros que yo especifique

  • Con la función memory_usage junto con el parametro deep=True, puedo saber cuanta memoria estoy usando en mis DataFrame

  • Con la función value_counts y especificando mi objeto, puedo contar los valores que existen de ese objeto

  • Con la función drop_duplicates puedo eliminar los duplicados que se encuentran en mi dataset

  • Con la función sort_values puedo organizar mis datos ascendentemente o descendentemente según la columna que yo especifique

  • Existen muchas funciones que es importante practicar

Si quieres contar tambien cuantos valores nulos hay una columna le puedes agregar el parametro dropna = False en la funcion value_counts

df['columna'].value_counts(dropna=False)

Como hicimos un duplicado y lo añadimos con append(), nuestro DataFrame se quedó con 551 elementos y el elento con índice 0 se añadió al final de nuestro DataFrame.
Con la función sort_index() podemos ordenar nuestro DataFrame por su index:

df_books.sort_index()

Hacer un Transponer los datos: df_books.T

notas de la clase

Hay ciertas funciones que son muy importantes y que siempre estaremos usando a la hora de hacer análisis de datos, para mayor facilidad y comprensión del DataFrame.
Mostrar las primeras dos líneas de registro
________________________________________
[1]
0 s
import pandas as pd
________________________________________
[2]
df_books = pd.read_csv("/content/bestsellers-with-categories_.csv",sep=",",header=0)
df_books.head(10)
#con (head), nos traemos la cantidad de datos que deseamos de nuetro data frame
________________________________________
[3]
df_books.info()
#con info podemos ver toda la informaciion de mi dataset, como; que columnas tengo.
#cuantos valores, de esa columna no son nulos, el tipo de datos que esta manejando cada columna,
#es un pequeño resumen de las carateristicas de los datos como lo son; (dtypes: float64(1), int64(3), object(3)
#memory usage: 30.2+ KB), cuantpos registros tengo (RangeIndex: 550 entries, 0 to 549), y el totañ de las columnas 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 550 entries, 0 to 549
Data columns (total 7 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   Name         550 non-null    object 
 1   Author       550 non-null    object 
 2   User Rating  550 non-null    float64
 3   Reviews      550 non-null    int64  
 4   Price        550 non-null    int64  
 5   Year         550 non-null    int64  
 6   Genre        550 non-null    object 
dtypes: float64(1), int64(3), object(3)
memory usage: 30.2+ KB
________________________________________
[4]
0 s
df_books.describe()
#esta funcion se estudia mucho en la ciencia de datros con estas funcion a nivel de datos y estadistica 
#puedo identificar con que nivel de datos estoy tranajandoa nivel de rangos o cual es la distribucion 
#de mis datos lo cual es muy útil 
________________________________________
[6]
df_books.tail(10)
# con ala funcion (tail), me trae los ultimos datos de mi data frame, todo lo contrario de head
#que me trae los primeros datos, es muy util ambos para no esplorar todo el data frame, sino pequeñas
#cantidades 
________________________________________
[7]
df_books.memory_usage(deep=True)
#esta funcion es mas tecnica y lo que indica es cuanta memoria estoy usando a nivel de data frame 
#y columnas especificas. la columna index es la que menos ocupa memoria, y la que mas ocupa en este caso 
#es names por ser alfanuméricas 
Index            128
Name           59737
Author         39078
User Rating     4400
Reviews         4400
Price           4400
Year            4400
Genre          36440
dtype: int64
________________________________________
[8]
df_books["Author"].value_counts()
#con esta funcion podemos hacer la evaluacion de valores unicos y nos da a conocer los regitros de cada uno
#dandome los resultados 
Jeff Kinney                           12
Gary Chapman                          11
Rick Riordan                          11
Suzanne Collins                       11
American Psychological Association    10
                                      ..
Keith Richards                         1
Chris Cleave                           1
Alice Schertle                         1
Celeste Ng                             1
Adam Gasiewski                         1
Name: Author, Length: 248, dtype: int64
________________________________________
[9]
df_books.iloc[0]
#aca estamos duplicando los registros y entramos momentaneamente 
Name           10-Day Green Smoothie Cleanse
Author                              JJ Smith
User Rating                              4.7
Reviews                                17350
Price                                      8
Year                                    2016
Genre                            Non Fiction
Name: 0, dtype: object
________________________________________
[10]
0 s
df_books = df_books.append(df_books.iloc[0])
________________________________________
[12]
df_books
#estos son valores duplicados, pero los valores duplicados no siempre son muy buenos a la hora de manejar 
#datos  
________________________________________
[13]
df_books.drop_duplicates()
#con esta funcion estamos eliminando los datos duplicados de toda la setencia de carateristicas 
#que son las columnas, es super util esta herramienta para los analisis 
________________________________________
[14]
df_books.drop_duplicates(keep="last")
#aca eliminasmos todos menos el que se anumcia en la funcion que es el ultimo 
________________________________________
[15]
df_books.sort_values("Year")
#esta funcion me ordena todod el data frame segun la columna que ingresemos en la funcion en este caso me ordeno 
#year 
________________________________________
[16]
df_books.sort_values("Year",ascending=False)
#con esta funcion estamos ordenando los valores desde el mas altos hazta el mas bajo de forma decendinte, 
#es bastante util para ver ciertos valores o ordenar por ciertas carateristicas que quiero nalisar 
________________________________________
estas son las principales funcionalidades de pandas para el manejo y filtrado de datos

  • describe() muestra un resumen estadístico rápido de sus datos:
df.describe()