ProgrammToolsPython 3 2 2021
ProgrammToolsPython 3 2 2021
Pedro Gomis
pedro.gomis@upc.edu
1
Módulo Pandas: Series y DataFrames
Pandas
• Pandas1 es un módulo (biblioteca o library) de Python que se usa para trabajar con conjuntos de datos.
Tiene funciones para analizar, filtrar, explorar y manipular datos.
• El nombre Pandas hace referencia tanto a "Data Panel (panel de datos)" como a "Python Data Analysis
(Análisis de datos de Python)" y fue creado por Wes McKinney2, 3 en 2008
1. https://pandas.pydata.org/
2. McKinney, Wes. (2011). "pandas: a Foundational Python Library for Data Analysis and Statistics" (PDF). recuperado de
https://www.dlr.de/sc/Portaldata/15/Resources/dokumente/pyhpc2011/submissions/pyhpc2011_submission_9.pdf
3. https://wesmckinney.com/
4. https://aprendeconalf.es/docencia/python/manual/pandas/
5. https://www.python-course.eu/pandas.php
6. https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html
2
7. https://pandas.pydata.org/pandas-docs/stable/getting_started/tutorials.html
Módulo Pandas: Series y DataFrames
3
Módulo Pandas: Series
Pandas: Series
• Para comenzar, importaremos los módulos NumPy y Pandas
In [1]: import numpy as np
Series
• Una serie (Series) es un objeto similar a una matriz etiquetada unidimensionalmente, capaz de contener
cualquier tipo de datos (enteros, strings, reales –float-, objetos Python, etc.). Las etiquetas de los
elementos se denominan índices (index). Por omisión, las etiquetas se numeran a partir del 0.
In [3]: S = pd.Series([11, 28, 72, 3, 5, 8])
In [4]: S
Out[4]:
0 11
1 28
2 72
3 3
4 5
5 8
dtype: int64 4
Módulo Pandas: Series
Pandas: Series
• En general, las Series se crean con la siguiente instrucción, donde se pueden definir las etiquetas de los
índices:
S = pd.Series(data, index=indices)
• Por ejemplo, las etiquetas de los índices pueden ser de tipo string:
5
Módulo Pandas: Series
Pandas: Series
• Es muy útil crear Series a partir de diccionarios. Los índices serán las claves:
In [9]: dicc = {'mangos': 20, 'naranjas': 33, 'fresas': 52, 'peras': 20}
In [10]: S = pd.Series(dicc)
In [11]: S
Out[11]:
mangos 20
naranjas 33
fresas 52
peras 10
dtype: int64
• Si agregamos una etiqueta en los índices que no esté en el diccionario, tendrá un valor perdido que se
representa por NaN (Not-a-Number)
In [12]: S = pd.Series(dicc, index = ['mangos', 'naranjas', 'fresas', 'peras', 'kiwis'])
In [13]: S
Out[13]:
mangos 20.0
naranjas 33.0
fresas 52.0
peras 20.0
kiwis NaN
dtype: float64 6
Módulo Pandas: Series
Pandas: Series
• Indexación o accesos a los elementos de las Series. Si se accede a un solo elemento se hace de forma
similar a un diccionario, pero si quiere acceder a varios elementos, se empaquetan en una lista:
In [14]: S['mangos']
Out[14]: 20.0
In [15]: S[['mangos', 'fresas']] # empaquetados em uma lista
Out[15]:
mangos 20.0
fresas 52.0
dtype: float64
• Se pueden acceder a los elementos también por su posición [0], [1], [1:3], etc
In [16]: S[0]
Out[16]: 20.0
In [17]: S[1:3]
Out[17]:
naranjas 33.0
fresas 52.0
dtype: float64
In [18]: S[2:]
Out[18]:
fresas 52.0
peras 20.0
kiwis NaN 7
Módulo Pandas: Series
Pandas: Series
• Atributos de las Series. Se pueden agregar o acceder atributos al objeto Series.
• s.name: se añade nombre a la Series
• s.size : devuelve el número de elementos de la Series.
• s.index : devuelve una lista con los nombres de las filas de la Series.
• s.dtype : devuelve el tipo de datos de los elementos de la Series.
8
Módulo Pandas: Series
Pandas: Series
Métodos (funciones internas) de las Series. Operaciones sobre los elementos de las Series. Los métodos
ignoran los valores NaN
• s.count() : Devuelve el número de elementos que no son nulos ni NaN en la serie s.
• s.sum() : Devuelve la suma de los datos de la serie s cuando los datos son de un tipo numérico, o la
concatenación de ellos cuando son del tipo cadena str.
• s.cumsum() : Devuelve una serie con la suma acumulada de los datos de la serie s cuando los datos son de
un tipo numérico.
• s.value_counts() : Devuelve la serie con la frecuencia (número de repeticiones) de cada valor de la serie s.
• s.min() : Devuelve el menor de los datos de la serie s.
• s.max() : Devuelve el mayor de los datos de la serie s.
• s.mean() : Devuelve la media de los datos de la serie s cuando los datos son de un tipo numérico.
• s.std() : Devuelve la desviación típica de los datos de la serie s cuando los datos son de un tipo numérico.
• s.describe(): Devuelve una serie con un resumen descriptivo que incluye el número de datos, su suma, el
mínimo, el máximo, la media, la desviación típica y los cuartiles.
9
Módulo Pandas: Series
Pandas: Series
Métodos (funciones internas) de las Series. Operaciones sobre los elementos de las Series. Los métodos
ignoran los valores NaN. Ejemplos sobre la Series ‘Frutas de la compra’
In [25]: S.name = 'Frutas de la compra'
Out[25]: 'Frutas de la compra'
In [26]: S.count()
Out[26]: 4
In [27]: S.sum()
Out[27]: 125.0
In [28]: S.min()
Out[28]: 20.0
In [29]: S.mean()
Out[29]: 31.25
In [30]: S.describe()
Out[30]:
count 4.000000
mean 31.250000
std 15.129992
min 20.000000
25% 20.000000
50% 26.500000
75% 37.750000
max 52.000000
Name: Frutas de la compra, dtype: float64 10
Módulo Pandas: DataFrames
Pandas: DataFrames
• En Python-Pandas un DataFrame es un tipo de objeto que define una estructura de datos etiquetada
bidimensional con columnas, de tipos que pueden ser diferentes, en forma de tabla.
11
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame a partir de un diccionario de listas. Las claves son los nombres de las columnas y los valores
son listas todas del mismo tamaño, que formarán los datos de las columnas. Ejemplo:
In [1]: d = {'nombre':['Juan','Carla','Judith'], 'edad':[23, 28, 25], 'peso': [70.5, 56.7, 51.2]}
In [2]: df = pd.DataFrame(d)
In [3]: df
Out[3]:
nombre edad peso
0 Juan 23 70.5
1 Carla 28 56.7
2 Judith 25 51.2
12
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame a partir listas de listas. Sintaxis:
DataFrame(data =listas, index = filas, columns = columnas, dtype=tipos)
In [4]: lst = [['Juan',23,70.5],['Carla',28,56.7],['Judith',25,51.2]]
In [5]: df = pd.DataFrame(lst, columns=['nombre','edad','peso'],index = ['id1', 'id2', 'id3'])
In [6]: df
Out[6]:
nombre edad peso
id1 Juan 23 70.5
id2 Carla 28 56.7
id3 Judith 25 51.2
Pandas: DataFrames
• DataFrame a partir de un diccionario de Series. Incluye otra Series, S4, con una fila adicional por lo que las
filas de las otras columnas aparecerán con NaN
14
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame a partir de un fichero CSV* o Excel.
15
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame: acceso a los elementos mediante las posiciones.
– df.iloc[i, j] : Devuelve el elemento que se encuentra en la fila i y la columna j del DataFrame df
Pueden indicarse secuencias de índices para obtener partes del DataFrame.
– df.iloc[i] : Devuelve una serie con los elementos de la fila i del DataFrame df
In [19]: df3
Out[19]:
nombre edad peso altura
0 Juan 23.0 70.5 1.84
1 Carla 28.0 56.7 1.65
2 Judith 25.0 51.2 1.69
3 Andres 29.0 84.2 1.78
In [20]: df3.iloc[0, 0]
Out[20]: 'Juan'
In [21]: df3.iloc[1]
Out[21]:
nombre Carla
edad 28
peso 56.7
altura 1.65
Name: 1, dtype: object 16
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame: acceso a los elementos mediante nombres.
– df.loc[fila, columna] : Devuelve el elemento que se encuentra en la fila con nombre fila y la columna de
con nombre columna del DataFrame df
– df[columna] : Devuelve una serie con los elementos de la columna de nombre columna del DataFrame df
In [22]: df
Out[22]:
nombre edad peso
id1 Juan 23 70.5
id2 Carla 28 56.7
id3 Judith 25 51.2
In [23]: df.loc['id1','nombre']
Out[23]: 'Juan'
In [24]: df.loc['id1'] In [25]: df.loc['id1',['nombre','peso']]
Out[24]: Out[25]:
nombre Juan nombre Juan
edad 23 peso 70.5
peso 70.5 Name: id1, dtype: object
Name: id1, dtype: object
17
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame: operaciones con columnas.
– Añadir una nueva columna a un DataFrame es similar al de añadir un nuevo par clave-valor a un
diccionario, pero poniendo los valores de la columna en una lista o Series.
– Se puede operar sobre las columnas, como hallar el índice de masa muscular, IMC = peso/altura**2.
In [26]: df
Out[26]:
nombre edad peso
id1 Juan 23 70.5
id2 Carla 28 56.7
id3 Judith 25 51.2
In [27]: df['altura'] = [1.84, 1.65, 1.69] # se añade la columna 'altura'
Out[27]:
nombre edad peso altura
id1 Juan 23 70.5 1.84
id2 Carla 28 56.7 1.65
id3 Judith 25 51.2 1.69
In [28]: df['IMC'] = df['peso']/df['altura']**2 # se calcula y añade columna 'IMC'
In [29]: df
Out[29]:
nombre edad peso altura IMC
id1 Juan 23 70.5 1.84 20.823488
id2 Carla 28 56.7 1.65 20.826446 18
id3 Judith 25 51.2 1.69 17.926543
Módulo Pandas: DataFrames
Pandas: DataFrames
• Atributos de los DataFrame. Se pueden agregar o acceder atributos al objeto DataFrame. Algunos son:
• df.name: se añade nombre al DataFrame
• df.shape : devuelve una tupla con el número de filas y columnas del DataFrame df
• df.size : devuelve el número de elementos de la Series.
• df.columns : devuelve una lista con los nombres de las columnas del DataFrame df
• df.index : devuelve una lista con los nombres de las filas del DataFrame df
• df.dtypes : devuelve el tipo de datos de las columnas del DataFrame df
• df.head(n) : devuelve las n primeras filas del DataFrame df
• df.tail(n) : devuelve las n últimas filas del DataFrame df
In [30]: df.name = ' Datos clínicos '
In [31]: df.size
Out[31]: 15
In [32]: df.shape In [36]: df.dtypes
Out[32]: (3, 5) Out[36]:
In [33]: df.columns nombre object
Out[33]: Index(['nombre', 'edad', 'peso', 'altura', 'IMC'], dtype='object') edad int64
In [34]: df.index peso float64
Out[34]: Index(['id1', 'id2', 'id3'], dtype='object') altura float64
In [35]: df.head(2) IMC float64
Out[35]: dtype: object
nombre edad peso altura IMC
id1 Juan 23 70.5 1.84 20.823488 19
id2 Carla 28 56.7 1.65 20.826446
Módulo Pandas: DataFrames
Pandas: DataFrames
Métodos (funciones internas) de los DataFrames. Operaciones sobre los elementos de las tablas. Los
métodos ignoran los valores NaN. Algunos de los métodos son:
• df.count() : Devuelve el número de elementos que no son nulos ni NaN en la serie s.
• df.sum() : Devuelve la suma de los datos de la serie s cuando los datos son de un tipo numérico, o la
concatenación de ellos cuando son del tipo cadena str.
• df.cumsum() : Devuelve una serie con la suma acumulada de los datos de la serie s cuando los datos son de
un tipo numérico.
• df.value_counts() : Devuelve la serie con la frecuencia (número de repeticiones) de cada valor de la serie s.
• df.min() : Devuelve el menor de los datos de la serie s.
• df.max() : Devuelve el mayor de los datos de la serie s.
• df.mean() : Devuelve la media de los datos de la serie s cuando los datos son de un tipo numérico.
• df.std() : Devuelve la desviación típica de los datos de la serie s cuando los datos son de un tipo numérico.
• df.describe(): Devuelve una serie con un resumen descriptivo que incluye el número de datos, su suma, el
mínimo, el máximo, la media, la desviación típica y los cuartiles.
20
Módulo Pandas: DataFrames
Pandas: DataFrames
• DataFrame: métodos. Ejemplos con df3
In [37]: df3.min()
Out[37]:
nombre Andres
edad 23
peso 51.2
altura 1.65
In [38]: df3.mean()
Out[38]:
edad 26.25
peso 65.65
altura 1.74
In [39]: df3.describe()
Out[39]:
edad peso altura
count 4.000000 4.000000 4.000000
mean 26.250000 65.650000 1.740000
std 2.753785 14.793354 0.086023
min 23.000000 51.200000 1.650000
25% 24.500000 55.325000 1.680000
50% 26.500000 63.600000 1.735000
75% 28.250000 73.925000 1.795000
max 29.000000 84.200000 1.840000 21