Pandas
Pandas
Pandas
Introducción
Equipo docente
Universidad de San Andrés
Buenos Aires
Mayo 2022
Introducción
¿Qué es Pandas?
¿Qué es?
Una biblioteca de análisis y manipulación de datos para Python
1 43
Características de Pandas
2 43
Características de Pandas
3 43
Características de Pandas
Referencia: https://pandas.pydata.org/
4 43
Primeros pasos. En consola
5 43
DATAFRAMES
6 43
Dataframes
DATAFRAMES
7 43
Ejemplo
In [5]: edades = [41, 56, 56, 57, 39, 59, 43, 56, 38, 60]
In [6]: pd.DataFrame(edades)
In [7]:
0
0 41
1 56
2 56
3 57
4 39
5 59
6 43
7 56
8 38
9 60
8 43
Ejemplo
0
0 41
1 56
2 56
9 43
Ejemplo
In [10]: data = { "Nombre": ["Liu", "Rowland", "Rivers",
"Waters", "Rice", "Fields",
"Kerr", "Romero", "Davis", "Hall"],
"Edad": edades }
In [11]: print(data)
Out [12]:
{'Nombre': ['Liu', 'Rowland', 'Rivers', 'Waters', 'Rice', 'Fields',
'Kerr', 'Romero', 'Davis', 'Hall'], 'Edad': [41, 56, 56, 57, 39, 59,
43, 56, 38, 60]}
10 43
Dataframes
11 43
Operaciones
Operaciones, con df_ejemplo
In [14]: df_ejemplo.index
Out[15]: RangeIndex(start=0, stop=10, step=1)
12 43
Más operaciones
Edad
Nombre
Liu 41
Rowland 56
Rivers 56
Waters 57
Rice 39
Fields 59
Kerr 43
Romero 56
David 38
Hall 60
13 43
Más operaciones
In [14]: df_ejemplo.describe()
Out[15]:
Edad
count 10.000000
mean 50.500000
std 9.009255
min 38.000000
25% 41.500000
50% 56.000000
75% 56.750000
max 60.000000
14 43
Más operaciones
In [14]: df_ejemplo.T
Out[15]:
Nombre Liu Rowland Rivers Waters Rice Fields Kerr Romero Davis Hall
Edad 41 56 56 57 39 59 43 56 38 60
15 43
Operaciones aritméticas
In [14]: df_ejemplo.multiply(2).head(3)
Out[15]:
Edad
Nombre
Liu 82
Rowland 112
Rivers 112
16 43
Operaciones lógicas
In [14]: df_ejemplo > 40
Out[15]:
Edad
Nombre
Liu True
Rowland True
Rivers True
Waters True
Rice False
Fields True
Kerr True
Romero True
David False
Hall True
17 43
Otro ejemplo, más interesante
df_demo = pd.DataFrame({
"A": 1.2,
"B": pd.Timestamp('20220528'),
"C": [(-1)**i * np.sqrt(i) + np.e * (-1)**(i-1) for i in range(5)],
"D": pd.Categorical(["Esta", "columna", "tiene", "datos", "raros"]),
"E": "Igual"
})
df_demo
A B C D E
0 1.2 2022-05-28 -2.718282 Esta Igual
1 1.2 2022-05-28 1.718282 columna Igual
2 1.2 2022-05-28 -1.304068 tiene Igual
3 1.2 2022-05-28 0.986231 datos Igual
4 1.2 2022-05-28 -0.718282 raros Igual
18 43
Ordenamiento con el ejemplo df_demo
In [34]: df_demo.sort_values("C")
A B C D E
0 1.2 2022-05-28 -2.718282 Esta Igual
2 1.2 2022-05-28 -1.304068 tiene Igual
4 1.2 2022-05-28 -0.718282 raros Igual
3 1.2 2022-05-28 0.986231 datos Igual
1 1.2 2022-05-28 1.718282 columna Igual
19 43
Leyendo datos desde archivos
Leyendos datos externos
.read_json()
.read_csv()
.read_hdf5()
.read_excel()
Los anteriores son enlaces, al hacer click te llevan a la
documentación respectiva.
20 43
Leyendos datos externos. Ejemplo
{
"Personaje": ["Sawyer", "...", "Walt"],
"Actor": ["Josh Holloway", "...", "Malcolm David Kelley"],
"Principal": [true, "...", false]
}
In [38]: pd.read_json("datos.json").set_index("Personaje").sort_index()
Actor Principal
Personaje
Hurley Jorge Garcia True
Jack Matthew Fox True
Kate Evangeline Lilly True
Locke Terry OQuinn True
Sawyer Josh Holloway True
Walt Malcolm David Kelley False
21 43
Leyendos datos externos. Opciones para leer
CSV
Parámetros importantes:
sep: Configura el separador (por ejemplo para usar : en lugar de ,).
header: Especifica información sobre los headers de columnas, también
para múltiples índices de columnas.
names: Alternativa al header – provee la forma de dar títulos diferentes a
las columnas.
usecols: Descarta e incluye columnas, trabaja como cualquier lista (
range(0:20:2) ).
skiprows: Descarte filas.
na_values: Indica que cadenas o string(s) se reconocerán como valores N/A
(los cuales son ignorados en la operaciones del data frame).
parse_dates: Intenta analizar las fechas en CVS; dando diferentes
comportamientos en cuanto a su estructura de datos;
opcionalmente se utiliza junto con date_parser.
compression: Tratar el archivo de entrada como un archivo comprimido
("inferir", "gzip", "zip", ...).
decimal: Divisor de punto decimal.
22 43
Slicing
Slicing de Dataframes
23 43
Ejemplo: seleccione solo la columna C de
df_demo
In [41]: df_demo.head(3)
A B C D E
0 1.2 2022-05-28 -2.718282 Esta Igual
1 1.2 2022-05-28 1.718282 columna Igual
2 1.2 2022-05-28 -1.304068 tiene Igual
C
0 -2.718282
1 1.718282
2 -1.304068
3 0.986231
4 -0.718282
24 43
Seleccionar más de una columna dando una lista
al operador []
A C
0 1.2 -2.718282
1 1.2 1.718282
2 1.2 -1.304068
3 1.2 0.986231
4 1.2 -0.718282
25 43
Seleccionar más de una fila usando rangos
A B C D E
1 1.2 2022-05-28 1.718282 columna Igual
2 1.2 2022-05-28 -1.304068 tiene Igual
In [46]: df_demo[1:6:2]
A B C D E
1 1.2 2022-05-28 1.718282 columna Igual
3 1.2 2022-05-28 0.986231 datos Igual
26 43
Slicing lógico
Se pueden usar arreglos de booleanos.
In [54]: df_demo[df_demo["C"] > 0]
Out [54]:
A B C D E
1 1.2 2022-05-28 1.718282 columna Igual
3 1.2 2022-05-28 0.986231 datos Igual
0 False
1 True
2 False
3 True
4 False
27 43
Agregando datos a los
Dataframes
Agregando datos a Dataframes existentes
28 43
Agregar una columna a Dataframe
A B C D E F
0 1.2 2022-05-28 -2.718282 Esta Igual -3.918282
1 1.2 2022-05-28 1.718282 columna Igual 0.518282
2 1.2 2022-05-28 -1.304068 tiene Igual -2.504068
29 43
Agregar una columna a un Dataframe
A B C D E E2 F
0 1.2 2022-05-28 -2.718282 Esta Igual 7.389056 -3.918282
1 1.2 2022-05-28 1.718282 columna Igual 2.952492 0.518282
2 1.2 2022-05-28 -1.304068 tiene Igual 1.700594 -2.504068
30 43
Agregar una fila a un Dataframe
pd.concat(
[
df_demo,
pd.DataFrame({"A": 1.3, "B": pd.Timestamp("2018-02-27"), "C": -0.777,
"D": "los tiene?", "E": "Igual", "E2": NaN, "F": 23}, index=[0])
], ignore_index=True
)
A B C D E E2 F
0 1.2 2022-05-28 -2.718282 Esta Igual 7.389056 -3.918282
1 1.2 2022-05-28 1.718282 columna Igual 2.952492 0.518282
2 1.2 2022-05-28 -1.304068 tiene Igual 1.700594 -2.504068
3 1.2 2018-02-26 0.986231 datos Igual 0.972652 -0.213769
4 1.2 2018-02-26 -0.718282 raros Igual 0.515929 -1.918282
5 1.3 2018-02-27 -0.777000 los tiene? Igual NaN 23.000000
31 43
Concat y Merge en Dataframes
Clave Valor
0 Primero 1
1 Segundo 1
Clave Valor
0 Primero 2
1 Segundo 2
32 43
Concat y Merge en Dataframes
Concatenemos una lista de data frames verticalmente ( axisa=0 ).
In [66]: pd.concat([df_1, df_2])
Clave Valor
0 Primero 1
1 Segundo 1
0 Primero 2
1 Segundo 2
33 43
Concat y Merge en Dataframes
34 43
Graficando SIN Pandas
Matplotlib
35 43
Matplotlib
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Usar algo así')
ax.set_xlabel("Números");
ax.set_ylabel("$\sqrt{x}$");
36 43
Matplotlib
Grafica múltiples líneas dentro de un mismo contenedor o
canvas.
Se hace llamando a ax.plot() varias veces.
y2 = y/np.exp(y*1.5)
fig, ax = plt.subplots()
ax.plot(x, y, label="y")
ax.plot(x, y2, label="y2")
ax.legend()
ax.set_title("Este gráfico no tiene sentido");
37 43
Matplotlib
38 43
Graficando CON Pandas
Graficando con Pandas
Opciones importantes:
xlim, ylim: Límites de las axisas.
yerr, xerr: Agrega incertidumbre a los puntos de datos.
stacked: Apila un gráfico de barras
secondary_y: Usa una axisa y secundaria para el gráfico.
Labeling: title: Agrega un título al gráfico (Usa una
lista de cadenas o strings si
subplots=True )
legend: Agrega una leyenda.
table: Si se configura true, agrega una
tabla debajo del gráfico.
**kwds: Palabra clave pasada a los métodos Matplotlib.
40 43
Graficando con Pandas
Con slicing.
In [80]: df_demo["C"].plot(figsize=(10, 2));
41 43
Graficando con Pandas
42 43
Graficando con Pandas
43 / 43
¡Gracias! ¿Preguntas?