0% encontró este documento útil (0 votos)
333 vistas53 páginas

Pandas

Este documento introduce Pandas, una biblioteca de Python para el análisis y manipulación de datos. Explica que Pandas proporciona estructuras de datos flexibles como DataFrames para trabajar con datos etiquetados. Describe las características clave de Pandas como indexación, agrupación de datos, E/S de archivos y funcionalidad de series temporales. Finalmente, presenta ejemplos de uso básico de Pandas como creación de DataFrames, operaciones y lectura de datos externos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
333 vistas53 páginas

Pandas

Este documento introduce Pandas, una biblioteca de Python para el análisis y manipulación de datos. Explica que Pandas proporciona estructuras de datos flexibles como DataFrames para trabajar con datos etiquetados. Describe las características clave de Pandas como indexación, agrupación de datos, E/S de archivos y funcionalidad de series temporales. Finalmente, presenta ejemplos de uso básico de Pandas como creación de DataFrames, operaciones y lectura de datos externos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 53

Pensamiento Computacional

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

Es un paquete de Python que proporciona estructuras de datos


rápidas, flexibles y expresivas diseñadas para que trabajar con
datos "relacionales" o "etiquetados" sea fácil e intuitivo. Su
objetivo es ser el bloque de construcción fundamental de alto
nivel para realizar análisis de datos prácticos (del mundo real)
en Python. Es un sistema de datos de código abierto.

1 43
Características de Pandas

DataFrame es la estructura de datos fundamental. Son


tablas de dos o más dimensiones, de tamaño variable que
permiten tener datos heterogéneos.
Mutabilidad de tamaño: las columnas se pueden insertar y
eliminar desde DataFrame y objetos de mayor dimensión.
Los datos se pueden alinear automáticamente o
manualmente usando un conjunto de etiquetas hechas para
este fin.
Permite agrupar los datos para realizar operaciones por
grupos o combinación en conjuntos de datos.
Facilita la conversión de estructuras de datos de Python y
NumPy a objetos del tipo DataFrame.

2 43
Características de Pandas

Manejo de datos basado en etiquetas, incluyendo la


indexación y la creación de subconjuntos.
Transformación y rotación de conjuntos de datos.
Herramientas robustas de E/S para cargar datos desde
archivos planos (CSV y delimitados), archivos de Excel, bases
de datos, etc.
Funcionalidad específica de series temporales: generación
de rango de fechas y conversión de frecuencia, estadísticas
de ventanas móviles, cambio de fecha y retraso.

3 43
Características de Pandas

Paquete Python: Python 3.


Instalación: pip install pandas
Cheatsheet: Enlace

Referencia: https://pandas.pydata.org/

4 43
Primeros pasos. En consola

In [1]: import pandas as pd


In [2]: pd.__version__
Out[3]: '1.4.2'
In [4]: pdoc pd
Class docstring:
pandas - a powerful data analysis
and manipulation library for Python
===================================

**pandas** is a Python package ...

5 43
DATAFRAMES

Contenedores de datos de Pandas:


I Lineal: Series. Es el único caso especial de una dimensión
(1D) de Dataframe.
I Multi Dimensión: DataFrame. Usamos DataFrame como para
casos más generales.

6 43
Dataframes
DATAFRAMES

Para mostrar las caracteríscas de los DataFrame , mostremos


un ejemplo, pero ¿desde donde podemos obtener los datos?

I Desde listas, diccionarioss, objetos numpy.


I Desde archivos CSV, HDF5, JSON, Excel, HTML, etc.
I Desde datos propios de Pandas.
I Desde el portapapeles.
I Etc. ;)

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

In [8]: df_edades = pd.DataFrame(edades)


df_edades.head(3)
In [9]:

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]}

In [13]: df_ejemplo = pd.DataFrame(data)


df_ejemplo.head(4)
Nombre Edad
0 Liu 41
1 Rowland 56
2 Rivers 56
3 Waters 57

10 43
Dataframes

Automáticamente crea las columnas desde el diccionario.


Ahora se tienen dos columnas: una para los nombres, y otra
para las edades.
La primera columna es el índice.
DataFrame siempre tiene índices, ya sean auto-generados o
personalizados.

11 43
Operaciones
Operaciones, con df_ejemplo

In [14]: df_ejemplo.index
Out[15]: RangeIndex(start=0, stop=10, step=1)

Para hacer que el Nombre sea el índice se usa


.set_index()
inplace=True modificará el frame padre (algo extraño,
no?)
In [16]: df_ejemplo.set_index("Nombre", inplace=True)
df_ejemplo

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

In [14]: (df_ejemplo / 2).head(3)


Out[15]:
Edad
Nombre
Liu 20.5
Rowland 28.0
Rivers 28.0

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

Para ver toda la documentación: Enlace

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

Slicing: Permite seleccionar un sub-rango/sub-conjunto de


todo el dataframe.
Documentación: larga y detallada o corta
Slicing rápidos:
I Se usan operadores de corchetes para dividir el data frame
rápidamente: [].
I Se usa el nombre de la columna para seleccionarla y solo
mostrar sus datos.
I Se utiliza un valor numérico para seleccionar una fila.

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

In [42]: df_demo['C'] # o df_demo.C también funciona.

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 []

Ejemplo: Seleccionar una lista con las columnas A y C , [’A’, ’C’]


desde df_demo
In [44]: my_slice = ['A', 'C']
In [45]: df_demo[my_slice]
Out [46]:

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

Se usan valores numéricos en corchetes [] para hacer slicing


sobre filas.
Se usan rangos como en las listas de Python.
In [45]: df_demo[1:3]

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

In [55]: df_demo["C"] > 0

0 False
1 True
2 False
3 True
4 False

In [56]: df_demo[(df_demo["C"] < 0) and (df_demo["D"] == "raros")]


A B C D E
4 1.2 2022-05-28 -0.718282 raros Igual

27 43
Agregando datos a los
Dataframes
Agregando datos a Dataframes existentes

Para agregar nuevas columnas se usa


frame["nueva col"] = algo o .insert().
Para agregar nuevas filas se usa concat().
Para combinar data frames:
Concat: Combina varios data frames sobre una axisa.
Merge: Combina data frames sobre columnas comunes.
(Join) Adjuntar data frames.
Documentación Enlace

28 43
Agregar una columna a Dataframe

In [58]: df_demo["F"] = df_demo["C"] - df_demo["A"]


In [59]: df_demo.head(3)

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

.insert() permite especificar la posición de la inserción.


.shape provee una tupla con el tamaño del data frame, (n°
filas, n° columnas).
In [59]: df_demo.insert(df_demo.shape[1] - 1, "E2", df_demo["C"] ** 2)
In [59]: df_demo.head(3)

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

Primero, creamos dos data frames para poder mostrar cómo


funciona .concat() and .merge().
In [64]: df_1 = pd.DataFrame({"Clave": ["Primero", "Segundo"], "Valor": [1, 1]})
In [65]: df_1

Clave Valor
0 Primero 1
1 Segundo 1

In [66]: df_2 = pd.DataFrame({"Clave": ["Primero", "Segundo"], "Valor": [2, 2]})


In [67]: df_2

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

Lo mismo, pero reindexnado.


In [67]: pd.concat([df_1, df_2], ignore_index=True)
Clave Valor
0 Primero 1
1 Segundo 1
2 Primero 2
3 Segundo 2

33 43
Concat y Merge en Dataframes

Concatenar, pero horizontalmente.


In [68]: pd.concat([df_1, df_2], axis=1)

Clave Valor Clave Valor


0 Primero 1 Primero 2
1 Segundo 1 Segundo 2

Mezclar sobre una columna común.


In [69]: pd.merge(df_1, df_2, on="Clave")

Clave Valor_x Valor_y


0 Primero 1 2
1 Segundo 1 2

34 43
Graficando SIN Pandas
Matplotlib

Matplotlib: es el estándar de-facto para la graficación en


Python.
Interface principal: pyplot.
Es mejor utilizar una API orientada a objetos como Figure y
Axis.
https://matplotlib.org/

In [72]: import matplotlib.pyplot as plt

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

Matplotlib puede también graficar datos de una DataFrame


data
Esto se debe a que sus datos son vistos como un arreglo.
fig, ax = plt.subplots()
ax.plot(df_demo.index, df_demo["C"], label="C")
ax.legend()
ax.set_title("No! no tiene sentido para nada");

38 43
Graficando CON Pandas
Graficando con Pandas

Cada frame tiene una función .plot() (ver la API )


Haces gráficos con Matplotlib.
Opciones importantes:
kind: ’line’ (por defecto), ’bar[h]’ , ’hist’ , ’box’ , ’kde’ ,
’scatter’ , ’hexbin’.
subplots: Fabrica una sub-plot por cada columna
(conviene usarlos con sharex y sharey).
figsize
grid: Agrega una grilla al gráfico (usa optiones de
Matplotlib).
style: Estilo de línea por columna (accepta listas o
diccionarios).
logx, logy, loglog: Gráficos Logarítmicos.
xticks, yticks: Usa valores para ticks (valores usados para
mostrar puntos específicos sobre las axisas).
39 43
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));

Con selección o filtrado dentro del plot.


In [81]: df_demo.plot(y="C", figsize=(10, 2));

41 43
Graficando con Pandas

Usando el parámetro kind para modificar el tipo de gráfico.


Hay pseudo-subfunciones para cada tipo (kind) de gráfico.
In [81]: df_demo["C"].plot(kind="bar"); # o df_demo["C"].plot.bar();

42 43
Graficando con Pandas

In [82]: df_demo["C"].plot(kind="bar", legend=True, figsize=(12, 4),


ylim=(-1, 3), title="Esto es un gráfico de C");

43 / 43
¡Gracias! ¿Preguntas?

También podría gustarte