PanDas = Panel Data Sets
Para trabajar con datos multidimensionales habituales en estadística, econometría, ...
Permite manipular tablas de datos (DataFrame)
Las tablas pueden tener diferentes tipos de datos a diferencia de las matrices de NumPy
import pandas as pd
fbk = ['Facebook', 2740, True, 2006]
twt = ['Twitter', 339, False, 2006]
ig = ['Instagram', 1221, True, 2010]
yt = ['YouTube', 2291, False, 2005]
lkn = ['LinkedIn', 727, False, 2003]
wsp = ['WhatsApp', 2000, True, 2009]
tik = ['TikTok', 689, False, 2016]
tel = ['Telegram', 500, False, 2013]
rrss = [fbk,twt,ig,yt,lkn,wsp,tik,tel] # redes sociales 2021
rrss
[['Facebook', 2740, True, 2006], ['Twitter', 339, False, 2006], ['Instagram', 1221, True, 2010], ['YouTube', 2291, False, 2005], ['LinkedIn', 727, False, 2003], ['WhatsApp', 2000, True, 2009], ['TikTok', 689, False, 2016], ['Telegram', 500, False, 2013]]
df_rrss = pd.DataFrame(rrss, columns = ['Nombre', 'Usuarios', 'es_FBK', 'Año'])
df_rrss
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 | |
1 | 339 | False | 2006 | |
2 | 1221 | True | 2010 | |
3 | YouTube | 2291 | False | 2005 |
4 | 727 | False | 2003 | |
5 | 2000 | True | 2009 | |
6 | TikTok | 689 | False | 2016 |
7 | Telegram | 500 | False | 2013 |
df_rrss.head() # muestra solo los primeros registros de la tabla
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 | |
1 | 339 | False | 2006 | |
2 | 1221 | True | 2010 | |
3 | YouTube | 2291 | False | 2005 |
4 | 727 | False | 2003 |
df_vacio = pd.DataFrame(columns = ['Nombre', 'Usuarios', 'es_FBK', 'Año'])
df_vacio
Nombre | Usuarios | es_FBK | Año |
---|
df_vacio = df_vacio.append({'Nombre':'Facebook',
'Usuarios':2740,
'es_FBK':True,
'Año':2006}, ignore_index = True)
df_vacio
<ipython-input-7-178c31760d6e>:1: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead. df_vacio = df_vacio.append({'Nombre':'Facebook',
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 |
En lugar de meter los datos de forma manual lo habitual es pasarle un archivo csv o Excel.
# seleccionar un elemento por etiquetas
df_rrss.loc[1, 'Nombre'] # loc de localizador
'Twitter'
# seleccionar un elemento por número
df_rrss.iloc[1, 0] # iloc de localizador por integer
'Twitter'
# seleccionar por columna
df_rrss['Nombre']
0 Facebook 1 Twitter 2 Instagram 3 YouTube 4 LinkedIn 5 WhatsApp 6 TikTok 7 Telegram Name: Nombre, dtype: object
# seleccionar una fila
df_rrss.iloc[2]
Nombre Instagram Usuarios 1221 es_FBK True Año 2010 Name: 2, dtype: object
# seleccionar por condición booleana
df_rrss['Usuarios'] > 2000 # Obtenemos un vector de True False
0 True 1 False 2 False 3 True 4 False 5 False 6 False 7 False Name: Usuarios, dtype: bool
df_rrss[df_rrss['Usuarios'] > 2000] # Convertimos el vector de True False en valores
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 | |
3 | YouTube | 2291 | False | 2005 |
# ordenando por el nombre
df_rrss.sort_values('Nombre', ascending = True) # el df_rrss no altera su orden
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 | |
2 | 1221 | True | 2010 | |
4 | 727 | False | 2003 | |
7 | Telegram | 500 | False | 2013 |
6 | TikTok | 689 | False | 2016 |
1 | 339 | False | 2006 | |
5 | 2000 | True | 2009 | |
3 | YouTube | 2291 | False | 2005 |
# por la cantidad de usuarios
df_rrss.sort_values('Usuarios', ascending = False)
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
0 | 2740 | True | 2006 | |
3 | YouTube | 2291 | False | 2005 |
5 | 2000 | True | 2009 | |
2 | 1221 | True | 2010 | |
4 | 727 | False | 2003 | |
6 | TikTok | 689 | False | 2016 |
7 | Telegram | 500 | False | 2013 |
1 | 339 | False | 2006 |
# ordenamos primero por el año y luego por el número de usuarios
df_rrss.sort_values(['Año', 'Usuarios'], ascending = [True, False])
Nombre | Usuarios | es_FBK | Año | |
---|---|---|---|---|
4 | 727 | False | 2003 | |
3 | YouTube | 2291 | False | 2005 |
0 | 2740 | True | 2006 | |
1 | 339 | False | 2006 | |
5 | 2000 | True | 2009 | |
2 | 1221 | True | 2010 | |
7 | Telegram | 500 | False | 2013 |
6 | TikTok | 689 | False | 2016 |