Sei sulla pagina 1di 27

Convirtiéndose en un maestro de kaggle -

Parte 2 Pandas Stack


Jaime Crispi
Junio 2019

1
1. Introducción
La vez anterior habı́amos visto sobre numpy, ahora vamos a la segun-
da parte para armar la experiencia que nos va a dar las herramientas para
desarrollar nuestro trabajo dentro del Data Science que es pandas, vamos
a hablar un poco de pandas.

Pandas es una librerı́a de python para manipulación y visualización de pyt-


hon y se usa mucho para el análisis de datos, Algo a tener en cuenta es que
Pandas esta hecho en numpy, al ser ası́ pandas al igual que numpy, tienen
un rendimiento muy bueno a la hora de hacer cálculos y manipular datos y
se usa mucho en Análisis de datos, Pandas en este momento es casi un
requisito laboral para quienes desempeñan la ciencia de datos.

Las estructuras de datos mas importantes que tenemos son 2 las series y
el dataframe las series de pandas son básicamente una array de numpy en
numpy tenemos las arrays y tienen una serie reglas que también se cumplen
para las series de numpy,

El Dataframe es la caracterı́stica mas importante, ya que es una suerte


de tabla compuesta por series de pandas ya que le da todo el poder a pan-
das para poder organizar mejor los datos y mostrarlos y hacer operaciones
con ellos, ahora vamos con un poco de codigo

2. Manos a la obra: Instalación


Para instalar pandas en cualquier maquina debemos tener instalado pyt-
hon, la versión que uso yo es la 3.5.2, pero vale cualquiera, entre la 2 y
la 3 no cambia tanto, solo debes leer la documentación, también puedes
instalar Anaconda (Haciendo click aquı́) para tener mejor organizadas tus
librerı́as en entornos virtuales, para instalarlo en cualquiera de las opciones
debes correr la linea

pip install pandas

2
y ya tendremos pandas instalado

3. Series
Ahora crearemos nuestra primera estructura de datos, una Serie de pan-
das, primero tenemos que importar a la librerı́a pandas, y se hace de la misma
forma que importábamos numpy, debemos escribir
import pandas as pd

En esta linea de código le estamos diciendo que queremos cargar toda la


librerı́a pandas bajo el nombre pd, y para crear una serie, se hace de la
misma manera que hacemos nuestras np.arrays, al igual que numpy le debo
pasar una lista de valores.

a = pd. Series ([1 ,2 ,3 ,4])

Al igual que un array de numpy los datos tienen que ser homogéneos, no
puedo mezclar valores, es decir, todos los valores deben pertenecer al mismo
tipo de dato, pero una estos datos pueden ser de cualquier tipo, pueden
ser String, Int, Floats, Datetime, Boolean, Object, vamos a ver lo que
me arroja mi variable

print (a)

out:
0 1
1 2
2 3
dtype: int64

Aquı́ nos da información sobre nuestro dato de tipo Serie. En la izquierda


podemos observar el ı́ndice que va del 0 al 2 y los datos de la derecha son
los datos que ingresamos cuando creamos nuestra serie y abajo nos muestra

3
el tipo de dato que tiene nuestra serie, en este caso entero de 32 bits, si
inspeccionamos el tipo de dato de nuestra variable a. es el siguiente
type(a)

out:

<class ’pandas .core. series . Series ’>

Aquı́ podemos ver el tipo de datos mas básico que maneja pandas que son
las Series, como dijimos este objeto se comporta como una array de numpy,
entonces podemos acceder a sus datos de la misma forma que lo hacı́amos
con nuestras Arrays de numpy, por ejemplo quiero acceder al numero 2
print (a[1])

y puedo usar cualquier tipo de acceso a los datos como lo hacia con numpy,
por ejemplo, quiero accesar a todos los datos menos el primero

print (a[1:])

out:
1 2
2 3
dtype: int64

Algo importante a notar es que si tenemos mas de un dato que queremos


desplegar, pandas lo hará con los ı́ndices y tipos de dato.

Vamos a crear otra serie de pandas, en este caso haré una serie con los
caracteres a b c y d.
a = pd. Series ([’a’,’b’,’c’,’d’])
print (a)

out:
0 a
1 b
2 c
3 d

4
dtype: object

Algo importante a notar es que nuestro tipo de dato, en este caso caracter,
pandas lo reconoce como un dato de tipo objeto, es decir, cualquier tipo
de variable string o character sera reconocida como objeto por pandas.

Si recordamos lo que pasamos en el Articulo de numpy, es que vimos un


comando, concretamente np.arange que me permitia generar una lista que
iba ascendiendo entre un numero y el maximo, en pandas tenemos algo si-
milar pero para las fechas, el metodo se llama pd.daterange, lo podemos
usar de esta manera

a = pd. date range (start=’1−1−2019’, end=’15−1−2019’)


print(a)

out:
DatetimeIndex ([’2019−01−01’, ’2019−01−02’, ’2019−01−03’, ’2019−01−04’,
’2019−01−05’, ’2019−01−06’, ’2019−01−07’, ’2019−01−08’,
’2019−01−09’, ’2019−01−10’, ’2019−01−11’, ’2019−01−12’,
’2019−01−13’, ’2019−01−14’, ’2019−01−15’],
dtype=’datetime64 [ns]’, freq=’D’)

Aqui estamos indicando hacer una Serie de tipo fecha que inice el dia 1,
de enero mes 1 del año 2019 y termine el dia 15 de enero del 2019 y si
inspeccionamos el tipo de dato de nuestra variable
type(a)

out:

<class ’pandas .core. indexes . datetimes . DatetimeIndex ’>

En este caso el tipo de dato de la variable .a.es un poco distinto, pero


en el fondo sigue siendo una serie de pandas, solo que esta especializada en
variables de tipo datetime.

Por ultimo vamos a repasar algunas utilidades de las series de pandas, em-
pecemos por el indice, en las series de pandas podemos manipular el indice,
pasandole una lista de esta manera,

5
a = pd. Series ([1 ,2 ,3])
a. index = [’a’, ’b’, ’c’]
print (a)

out:
a 1
b 2
c 3
dtype: int64

y podemos acceder a los datos con los indices nuevos


print (a[’a’:’b’])

out:
a 1
b 2
dtype: int64

También podemos pasar de una serie a un array de numpy, con el atributo


values de las series de pandas de esta forma
n = a. values
print (type(n))

out:
<class ’numpy. ndarray ’>

Con esto damos por visto las series de pandas y pasamos a lo siguiente que
son, los dataframes

6
4. Dataframes
La razon de que pandas sea la herramienta mas usada para analisis
de datos, es porque dota a python de la capacidad de tener una especie
de tabla, con columnas y filas, que contienen indices y nombres para las
columnas de datos, vamos a ver como podemos crear estas estructuras
de datos, llamadas dataframes usando formas distintas, vamos a importar
nuestra libreria numpy nuevamente para crear nuestro dataframe a partir
de una array de numpy
import numpy as np

ahora vamos a crear una array de números aleatorios, con el método np.random.randint,
esto significa que creare números aleatorios enteros y le asignaremos las pro-
piedades low y high respectivamente para da un rango de generación de esos
números enteros, la propiedad size es la cantidad y forma de la array que
quiero generar
t = np. random . randint (low =10, high =100 , size =[20 ,])

esto es lo que explique arriba, pero me falto una parte y es que size recibe
como parámetro con una lista, que contiene la forma de la array que vamos
a generar, si quiero generar una array de 20 valores debo pasar una ’,’ al
final para no causar errores en la librerı́a. Ahora vamos a usar otro método
de numpy, que se llama np.random.choice que escogerá un valor de una lista
que yo le pase anteriormente
n = np. random . choice ([’Tecnologia ’, ’Micelaneos ’,

’Ropa ’, ’Comida ’, ’Gagets ’], 20)

en esta linea lo que hago es pasar una lista de valores como primer parame-
tro y como segundo parametro, le paso la cantidad de valores que quiero que
ponga en ese array en este caso 20, ahora vamos a hacer nuestro dataframe.

Primeramente tenemos que hacer un zip de estos dos arrays, para que pan-
das lo reconzca como una dataframe valido, eso lo que hara es convertir
los valores de arrays a tuplas, para hacer eso debemos escribir la siguiente
linea de codigo

7
a = list(zip(t, n))

zip solo devuelve un objeto de tipo zip, entonces debemos hacer una conver-
sión explicita a lista, ahora para crear nuestro dataframe debemos hacerlo
de la siguiente forma

data = pd. DataFrame (data=a, columns =[’Numero ’, ’Nombre ’])

aqui estamos diciendo a pandas, que cree un dataframe a partir de nuestra


lista de tuplas .a”, y que las columnas tengan esos nombres de columna
respectivamente, veamos como luce nuestro dataframe
print (data)

out:
Numero Nombre
0 63 Gagets
1 12 Ropa
2 64 Tecnologia
3 83 Micelaneos
...

aqui podemos ver nuestro dataframe, la primera columna es la de indice, y


las que tienen el nombre son las nuestros valores, y si inspeccionamos el tipo
de variable de nuestros datos es el siguiente

type(data)

out:
<class ’pandas .core.frame. DataFrame ’>

ahora veremos otra forma de crear nuestro dataframe, concretamente desde


un diccionario, para ello usaremos las mismas variable que habiamos
usado anteriormente pero las pasaremos a un diccionario de la siguiente
forma
datos = { ’Numero ’:n, ’Nombre ’:t}

8
y para crear nuestro dataframe le pasaremos en el parámetro datos nuestro
diccionario
data = pd. DataFrame (data=datos)
print (data)
out:
Numero categoria
0 26 Ropa
1 91 Tecnologia
2 80 Ropa
...

tambien podemos crear nuestros dataframes a partir de csv, con el metodo


readcsv de pandas, vamos a descargar un csv de ejemplo de la web, cualquiera
sirve para ver como hacerlo
data = pd. read csv (’ex.csv ’)
print (data)

out:
Month " Average " "2005" "2006" "2007"
0 May 0.1 0 0 1

Ahora vamos a trabajar con nuestros datos generados anteriormente con


numpy asique los cargaremos a partir de nuestro diccionario

data = pd. DataFrame (data=datos)

9
ahora veremos algunas operaciones que nos serán útiles en nuestra experien-
cia. La primera operación es head la que nos devolverá los primero 5 valores
del dataframe se usa de la siguiente manera
print (data.head ())

out:
Numero categoria
0 48 Ropa
1 46 Micelaneos
2 59 Gagets
3 92 Comida
4 13 Ropa

Otro método útil que tenemos disponible en los dataframes es el método


tail que nos devuelve los 5 últimos datos de nuestro dataframe y se usa de
la misma manera que head
print (data.tail ())
out:
Numero categoria
15 81 Ropa
16 38 Comida
17 97 Micelaneos
18 31 Tecnologia
19 11 Comida
...

y de igual forma como lo hacı́amos con numpy podemos ver la forma de


nuestro dataframe

print (data.shape)

out:
(20, 2)

el primer numero representa las filas y el segundo las columnas, no son


dimensiones en si, ya que hablamos de una tabla de datos no una

10
matriz

también podemos ver las columnas de nuestro dataframe, con la pro-


piedad columns de nuestro dataframe
print (data. columns )

out:
Index ([ ’Numero ’, ’categoria ’], dtype=’object ’)

Aqui aparecen los nombres de las columnas y como explicamos al principio


pandas toma los valores de tipo string como objetos, tambien puedo acceder
a todos los valores de una columna de dos formas
print (data. Numero )

out:
0 55
1 48
2 87
3 12
4 26
5 54
6 99
...

print (data[’categoria ’])

out:
0 Ropa
1 Tecnologia
2 Micelaneos
3 Tecnologia
4 Ropa

Si queremos acceder a información de nuestra columna de manera rápida


para saber aun mas de nuestros datos, tenemos el método describe que nos
retorna información de nuestros datos, vamos a ver como se utiliza

11
print (data[’Numero ’]. describe ())

out:
count 20.000000
mean 50.300000
std 24.385285
min 13.000000
25\ % 33.750000
50\ % 51.500000
75\ % 59.250000
max 97.000000
Name: Numero , dtype: float64

Como podemos notar, todos los números son de tipo float por lo que
tienen punto decimal aunque sean enteros ahora pasare a hacer una
descripción rápida de todos estos valores

count: Es la cantidad de valores en la tabla

mean: Es el promedio de todos los datos

std: Es la desviación estándar de todos los valores

min: Es el valor mı́nimo

25 %: Es la media porcentual de los valores aplica para los demás porcentajes

max: Es el valor máximo

name: Es el nombre de la columna

dtype: Es el tipo de datos de los valores que se muestran en el comando


describe

12
Otro metodo util dentro del dataframe, con el que podemos saber mas
acerca de los datos qe estamos trabando es info, veamos como se usa
print (data.info ())

out:
RangeIndex : 20 entries , 0 to 19
Data columns (total 2 columns ):
Numero 20 non−null int64
categoria 20 non−null object
dtypes : int64 (1), object (1)
memory usage: 400.0+ bytes

Al igual que la vez anterior pasare a explicar que significan estos valores
con una descripción rápida

RangeIndex: Range index nos da información sobre las entradas totales


de nuestro dataframe, y el ı́ndice en este caso 20 datos totales y los ı́ndi-
ces van del 0 al 19

Data Colummns: Es la cantidad de columnas en nuestro dataframe, en


este caso 2

Numero, Categoria: Estas son nuestras columnas los números nos indi-
can la cantidad de entradas que tenemos en la tabla, si hay o no valores
nulos, y el tipo de dato de cada columna

dtypes: Son los tipos de datos que hay en nuesto dataframe en este ca-
so, un tipo de dato int64 y otro object

memory usage: Esto nos muestra el tamaño en memoria de nuestro da-


taframe, en este caso al rededor de 400bytes

tip

Con el metodo values podemos pasar cualquier columna a matriz o in-


cluso la tabla, ya que un dataframe esta compuesto a su vez de series
print (data. values )

13
out:
[[50 ’Micelaneos ’]
[13 ’Micelaneos ’]
[41 ’Gagets ’]
[56 ’Micelaneos ’]
[50 ’Micelaneos ’]
[63 ’Ropa ’]
[51 ’Ropa ’]
[97 ’Tecnologia ’]
....

y al igual que las series el dataframe devuelve una array de numpy

5. Indices
Al igual que con las series podemos manipular los indices en nuestro
dataframe y cambiar la manera acceder a los datos que tenemos en el, para
hacer esto tenemos que usar el metodo setindex de nuestro dataframe,
vamos a ver como se hace

14
data = data. set index (’Numero ’)
print (data)

out:
75 Tecnologia
81 Micelaneos
55 Ropa
11 Ropa
...
También si no queremos reasignar la variable podemos usar el parámetro
inplace que recibe un valor booleano, que cuando es true nos reasigna au-
tomáticamente la variable
data. set index (’Numero ’, inplace =True)
print (data)

out:
18 Comida
14 Tecnologia
55 Gagets
20 Tecnologia
...
Tambien podemos ordenar el indice, con el metodo sortindex de pandas
vamos a ver como se usa
\\ \\
data. sort index (axis = 0, ascending =True , inplace =True)
print (data)

out:
14 Tecnologia
18 Comida
20 Tecnologia
26 Comida
...
Recordemos que el axis = 0 significa que el cambio se hará a nivel
de las filas y axis = 1 es a nivel de las columnas aquı́ ordenamos

15
el ı́ndice de manera ascendente, pero tambien puedo ordenarlos de manera
descendente, de la siguiente forma
data. sort index (axis = 0, ascending =False , inplace =True)
print (data)

out:
95 Tecnologia
92 Gagets
84 Comida
83 Gagets
...
También puedo ordenar una columna, para eso creare un valor mas para
ponerlo en mi dataframe de la siguiente manera
r = np. random . randint (low =10, high =100 , size =[20 ,])
\\ \\
datos = { ’categoria ’:n, ’Numero ’:t, ’aleatorio ’:r}
data = pd. DataFrame (data=datos)
data. set index (’Numero ’, inplace =True)
data. sort index (axis = 0, ascending =False , inplace =True)
En este código lo que hice, fue rehacer el dataframe con otra columna
de números aleatorios, con fines de ejemplificar como podemos ordenar una
columna, y para hacerlo vamos a escribir lo siguiente
data. sort values (by = ’aleatorio ’, ascending =False , inplace =True)

out:
53 94 Ropa
66 81 Comida
72 80 Comida
...
El parámetro by recibe el nombre de nuestra columna, y en este caso quiero
que sea descendente, y como podemos observar, cuando yo ordeno los valo-
res, no solo los valores se ordenan, si no toda la tabla, incluyendo los ı́ndices,
eso es muy útil, porque no estoy desordenando mi dataframe a la hora de
analizar datos

16
Ahora si quiero descartar una columna del dataframe tengo el metodo
drop que se usa la de la siguiente manera
\\ \\
data.drop ([’aleatorio ’], axis =1, inplace =True)
print (data)

out:
53 Ropa
66 Comida
72 Comida

en este caso elimine la columna aleatorio, pero también puedo eliminar


filas, entonces, lo que hice fue indicar a pandas que lo queria eliminar en el
axis = 1 que es el eje de las columnas

6. Busqueda y Filtrado de datos


Ahora vamos a entender la función mas importante dentro de la librerı́a
pandas que es como filtramos o buscamos datos la primera función de la que
hablare es iloc o index location, que sirve para traer informacion a partir
de sus indices, para eso vamos a rehacer el dataframe una vez mas
datos = { ’categoria ’:n, ’Numero ’:t, ’aleatorio ’:r}
data = pd. DataFrame (data=datos)
data. set index (’Numero ’, inplace =True)
data. sort index (axis = 0, ascending =False , inplace =True)

y ahora usaremos el primer metodo que es iloc, este método recibe como
parámetro una lista de ı́ndices o un indice, veamos
print (data.iloc [1])
out:
aleatorio 74
categoria Micelaneos
Name: 97, dtype: object

Aquı́ tenemos el dato especifico que mandamos a llamar a través de iloc, y


sus propiedades, pero también podemos traer múltiples ı́ndices de la siguiente
forma

17
print (data.iloc [[0 ,1 ,2]])

out:
Numero
99 74 Gagets
97 74 Micelaneos
96 70 Ropa

aqui podemos ver la información de esos ı́ndices que mandamos a llamar con
la función iloc, pero también puedo hacer cosas mas complejas, como llamar
los elementos partiendo del primero y terminando en el cuarto de mi columna
çategoria”veamos como hacerlo
print (data.iloc [1:4 ,1])

out:
97 Micelaneos
96 Ropa
83 Gagets
Name: categoria , dtype: object

aquı́ lo que le estoy diciendo con el 1:4 es que me traiga los valores partiendo
del segundo y terminando en el cuarto, y después de la ”,” defino que sea la
segunda columna, en caso de querer la primera tendrı́a que poner 0 en vez de 1

También puedo pasarle booleanos y luego explicare como funciona


print (data.iloc [[True , False , True ]])

out:
99 74 Gagets
96 70 Ropa

Esto parece raro al comienzo, pero en escénica lo que hace es recorrer los
ı́ndices empezando por el primero, y si tiene un valor True en la lista nos
devuelve el valor, de otro modo lo omite, aquı́ le estoy diciendo que me
muestre primer y tercer elemento, para comprobarlo podemos ver los
primeros valores de nuestro dataframe
print (data.head ())

18
out:
aleatorio categoria
Numero
99 74 Gagets
97 74 Micelaneos
96 70 Ropa

como vemos arriba, me selecciono el primer y tercer valor de la lista.

Ahora vamos con otro método un poco mas interesante loc, la principal
diferencia, es que iloc trabaja con un ı́ndice de 0 a el máximo valor, pero
esos valores no son nuestro ı́ndice que lo definimos cuando hicimos la tabla,
nuestro ı́ndice es aleatorio, ası́ que loc trabaja con nuestro ı́ndice ya sea
numérico o de texto, en este caso, voy a llamar a mi primer valor que tiene
el indice 99
print (data.loc [99])

out:
aleatorio 74
categoria Gagets
Name: 99, dtype: object

como vemos arrojo nuestro primer elemento, y como con iloc podemos traer
indices multiples.
print (data.loc [[97 , 99 ,76]])

out:
97 74 Micelaneos
99 74 Gagets
76 10 Micelaneos
76 74 Micelaneos

en este caso, como el indice 76 estaba repetido me trajo todos los valores
que tenı́an el indice 76. loc tiene cosas aun mas interesantes, por ejemplo
puedo buscar todos los valores que sean de la categorı́a micelaneo de esta
forma

19
print (data.loc[data[’categoria ’] == ’Micelaneos ’])

out:
aleatorio categoria
Numero
97 74 Micelaneos
76 10 Micelaneos
76 74 Micelaneos
69 23 Micelaneos

también podemos usar mas condiciones, por ejemplo quiero traer todos los
números aleatorios mayores a 70 o menores a 30
print (data.loc [( data[’aleatorio ’] > 70) | (data[’aleatorio ’] < 30)])

out:
Numero
99 74 Gagets
97 74 Micelaneos
83 10 Gagets
76 10 Micelaneos

7. Utilidades de csv y excel


vamos a descargar el siguiente csv click aquı́ y lo vamos a copiar e nuestra
carpeta en la que tenemos el archivo .py, anteriormente ya vimos como abrir
un csv, ahora lo volveremos hacer de esta forma
data = pd. read csv (’weather .csv ’)

y si inspecionamos nuestro dataframe tenemos la misma informacion que


en nuestro archivo csv
print (data.head ())

out:
outlook temperature humidity windy play
0 overcast hot high False yes
1 overcast cool normal True yes

20
2 overcast mild high True yes
3 overcast hot normal False yes
4 rainy mild high False yes
ahora para hacer el siguiente paso debemos instalar la libreria openpyxl,
para eso escribimos en consola

pip install openpyxl

ahora para guardar un archivo csv como excel tenemos que hacer lo siguiente
data. to excel (’myDataframe .xlsx ’)
ahora si vemos en nuestra carpeta tenemos un nuevo archivo excel

ahora para abrirlo debemos instalar la libreria de python xlrd de la mis-


ma forma que la anterior, escribimos en consola

pip install xlrd


y para leer el archivo excel haremos lo siguiente

data2 = pd. read excel (’myDataframe .xlsx ’)


print (data2.head ())

out:
outlook temperature humidity windy play
0 overcast hot high False yes
1 overcast cool normal True yes
2 overcast mild high True yes
3 overcast hot normal False yes
4 rainy mild high False yes

8. Utilidades de pandas
Vamos a ver algunas de las utilidades de pandas, que nos harán la vida
mas sencilla, la primera que vamos a ver es concatenacion, para eso haremos

21
dos dataframes de la siguiente manera

data1 = pd. DataFrame ({ ’numero ’:[1 ,2] , ’letra ’:[’a’, ’b’]})


data2 = pd. DataFrame ({ ’palabra ’:[’Hola ’, ’Adios ’], ’numero ’: [1,2], ’l

print (data1)

out:
letra numero
0 a 1
1 b 2

print (data2)

out:
letra numero palabra
0 a 1 Hola
1 b 2 Adios
Ahora lo que haremos es concatenar estos datos, podemos concatenar de dos
maneras, a nivel de filas axis = 0 o a nivel de columnas axis = 1, pero si
las concateno a nivel de las filas, va a pasar algo curioso, veamos
print (pd. concat ([ data1 , data2], axis =0))

out:

letra numero palabra


0 a 1 NaN
1 b 2 NaN
0 a 1 Hola
1 b 2 Adios
aquı́ concatenamos, y como podemos ver, se fusionaron las columnas, pero
en palabra salen 2 valores que dicen NaN, lo que pasa, es que, en nuestras
columnas de data1 no existı́a la columna palabra, entonces pandas para
concatenarla relleno todos los valores faltantes con NaN, esto es algo impor-
tante a tener en cuenta, cuando un valor es nulo, pandas automáticamente
rellenara con el valor NaN, otra cosa importante a notar, es que tampoco

22
se sustituye el ı́ndice, ya que como podemos ver este, en el resultado sigue
conservando los ı́ndices de cada tabla, para evitar esto, debemos pasar un
parámetro que se llama ignore index
print (pd. concat ([ data1 , data2], axis =0, ignore index =True ))

out:
letra numero palabra
0 a 1 NaN
1 b 2 NaN
2 a 1 Hola
3 b 2 Adios
Como podemos ver ahora tenemos el ı́ndice de la tabla continuo,
del 0 al 3, también puedo concatenarlo a nivel de columnas pasando axis
=1

print (pd. concat ([ data1 , data2], axis =1))

out:
letra numero letra numero palabra
0 a 1 a 1 Hola
1 b 2 b 2 Adios
Lo ultimo que veremos de las concatenaciones es bastante interesante, sin
mas introducción vamos a ello, vamos a definir un dataframe interesante
data1 = pd. DataFrame ({" capital ":
[’Santiago ’, ’Lima ’, ’Montevideo ’, ’Buenos air
" temperatura ":[30 ,20 ,25 ,39]})
Ahora creare otro dataframe distinto, pero guardando similaridades
data2 = pd. DataFrame ({" capital ":
[’Buenos aires ’, ’Lima ’, ’Santiago ’],
" humedad ":[68 ,61 ,63]})
Si yo quiero juntar los dos dataframes, y no sustituir los valores por comple-
to para hacer una tercera tabla de datos, porque las dos comparten valores,
peor o si no quedarı́a con datos nulos, o sustituirı́a algunos y habrı́an datos
confusos para evitar esto puedo unirlos de la siguiente manera

23
print (pd.merge(data1 , data2 , on=’capital ’))

out:
capital temperatura humedad
0 Santiago 30 63
1 Lima 20 61
2 Buenos aires 39 68
como podemos ver, los valores se combinaron y los que arrojaban nulo, se
borraron directamente, y como evito esto, esto se evita de la siguiente forma.
print (pd.merge(data1 , data2 , on=’capital ’, how=’outer ’))

out:
capital temperatura humedad
0 Santiago 30 63.0
1 Lima 20 61.0
2 Montevideo 25 NaN
3 Buenos aires 39 68.0
Aquı́ podemos ver que unimos las dos tablas conservando los valores nulos y
la temperatura de montevideo.

Ahora pasaremos a una caracterı́stica muy interesante en cuanto al análisis


de datos, que es el método groupby que nos ayudara a seleccionar y hacer
análisis de datos de manera simple, para esto descargaremos otro archivo csv
click aqui y lo vamos a importar en pandas
data = pd. read csv (’data.csv ’)
print (data.head ())
por ejemplo yo podrı́a sacar la media de las cervezas que se sirven en cada
paı́s de la siguiente manera
print (data[’ beer servings ’]. mean ())

out:
106.16062176165804
pero lo interesante de groupby es que puedo sacar la media de cervezas ser-
vidas por cada continente de esta manera

24
print (data. groupby (’continent ’). mean ())

out:
continent
Africa 61.471698
Asia 37.045455
Europe 193.777778
North America 145.434783
Oceania 89.687500
South America 175.083333
Name: beer servings , dtype: float64

también puedo saber el valor máximo o mı́nimo de cada continente


print (data. groupby (’continent ’). beer servings .max ())

out:
Africa 376
Asia 247
Europe 361
North America 285
Oceania 306
South America 333

print (data. groupby (’continent ’). beer servings .min ())

out:
continent
Africa 0
Asia 0
Europe 0
North America 1
Oceania 0
South America 93

También tenemos un método para agregar varias métricas de datos al


mismo tiempo este método se llama agg y con el podemos calcular varias
metricas de datos al instante

25
print (data. groupby (’continent ’). beer servings .agg ([ ’mean ’, ’min ’, ’max

out:
mean min max
continent
Africa 61.471698 0 376
Asia 37.045455 0 247
Europe 193.777778 0 361
North America 145.434783 1 285
Oceania 89.687500 0 306
South America 175.083333 93 333

y con esto pasamos al ultimo tema que quiero cubrir en esta entrega de
pandas, ya que en el futuro habrán mas entregas, pero por ahora esto es lo
necesario a saber para avanzar en los tutórales de un futuro

9. Tablas Pivotes
Las tablas pivote son un concepto muy bueno de pandas, que nos permiten
generar tablas a partir de una función y agruparlas, similar a groupby pero
nos devuelven la información a una tabla se usan de la siguiente manera
pivot = data. pivot table (
values = ’ total litres of pure alcohol ’,
index=’continent ’,
aggfunc =’mean ’)

Aqui estoy indicando a pandas que quiero tomar la columna litros de al-
cohol puro en total y quiero que los agrupe por el indice continente, que
en este caso es nuestro ’Groupby’ y que aplique la funcion media a los
valores

26
print (pivot)

out:
total litres of pure alcohol
continent
Africa 3.007547
Asia 2.170455
Europe 8.617778
North America 5.995652
Oceania 3.381250
South America 6.308333

y esta tabla podemos usarla en nuestra investigación o trabajo de análisis, no


puedo agrupar aquı́ todas las cosas que se pueden hacer con el pivot table,
pero puedes revisar la documentación haciendo click aqui, la razón principal
es que, necesitarı́a un dataset para cada condición.

10. Conclusión
Pandas es una librerı́a muy poderosa, por eso es tan utilizada en análisis
de datos, porque además de ser fácil de usar, se puede hacer un análisis
completo en muy pocas lineas de código, algo que no todas las librerı́as
pueden, además es muy eficiente a la hora de ahorrar espacio en memoria,
y muy rápida en todas sus operaciones, espero hayas aprendido a usar esta
librerı́a en un 50 por ciento, aun falta mas, pero quiero ver algo antes de
seguir con esta librerı́a

11. Agradecimientos
Como siempre, gracias a todos los grupos de facebook que me dejan pu-
blicar en sus paginas y me dan la visibilidad que anhelo para seguir en el
mundo de la investigación, como siempre si te gusto, comparte esta publica-
ción con tus amigos, y si quieres apoyarme te dejo un link de donación en
paypal, aunque no es necesario, con tu feedback de doy por pagado, muchas
gracias y hasta la próxima
Donaciones aquı́, para mis tazas de café

27