Basecamp: Ciencia de Datos
Basecamp: Ciencia de Datos
Basecamp: Ciencia de Datos
Ciencia de Datos
Obtención y Preparación de Datos
Objetivo de la jornada
La Librería Pandas
import pandas as pd
print(s)
# 0 Matemáticas
1 Historia
2 Economía
3 Programación
4 Inglés
dtype: string
import pandas as pd
s = pd.Series({'Matemáticas': 6.0, 'Economía': 4.5,
'Programación': 7}, dtype='string')
print(s)
# Matemáticas 6.0
Economía 4.5
Programación 7
dtype: string
● s.index : Devuelve una lista con los nombres de las filas del
DataFrame s.
import pandas as pd
#10
s.index
s.dtype
# dtype('int64')
Acceso a los elementos de una serie
El acceso a los elementos de un objeto del tipo Series puede ser a través
de posiciones o a través de índices (nombres).
import pandas as pd
# 10
s.sum()
# 20
s.cumsum()
# 0 1
1 2
2 3
3 4
4 6
5 8
6 10
7 12
8 15
9 18
10 22
dtype: int64
s.value_counts()
# 1 4
2 3
3 2
4 1
dtype: int64
s.value_counts(normalize = True)
# 1 0.4
2 0.3
3 0.2
4 0.1
dtype: float64
s.min()
# 1
s.max()
# 4
s.mean()
# 2.0
s.std()
# 1.0
s.describe()
# count 11.0
mean 2.0
std 1.0
min 1.0
25% 1.0
50% 2.0
75% 2.5
max 4.0
dtype: float64
Los operadores binarios (+, *, /, etc.) pueden utilizarse con una serie, y
devuelve otra serie con el resultado de aplicar la operación a cada
elemento de la serie.
import pandas as pd
# 0 2
1 4
2 6
3 8
dtype: int64
s%2
# 0 1
1 0
2 1
3 0
dtype: int64
s = pd. Series(['a','b','c'])
s*5
# 0 aaaaa
1 bbbbb
2 ccccc
dtype: object
import pandas as pd
import numpy as np
s.apply(np.log)
# 0 0.000000
1 0.693147
2 1.098612
3 1.386294
dtype: float64
s = pd. Series(['a','b','c'])
s.apply(str.upper)
# 0 A
1 B
2 C
dtype: object
Para filtrar una serie y quedarse con los valores que cumplen una
determinada condición se utiliza el siguiente método:
import pandas as pd
s = pd.Series({'Matemáticas': 6.0, 'Economía': 4.5,
'Programación': 8.5})
# Matemáticas 6.0
Programación 8.5
dtype: float64
Ordenar una serie
import pandas as pd
print(s.sort_values())
# Economía 4.5
Matemáticas 6.0
Programación 8.5
dtype: float64
print(s.sort_index(ascending = False))
# Programación 8.5
Matemáticas 6.0
Economía 4.5
dtype: float64
Eliminar los datos desconocidos en una serie
import pandas as pd
import numpy as np
# 0 a
1 b
2 None
3 c
4 NaN
5 d
dtype: object
s.dropna()
# 0 a
1 b
3 c
5 d
dtype: object
La clase de objetos DataFrame
Un DataFrame contiene dos índices, uno para las filas y otro para las
columnas, y se puede acceder a sus elementos mediante los nombres de
las filas y las columnas.
imagen:fuente propia
Los valores asociados a las claves del diccionario deben ser listas del
mismo tamaño.
import pandas as pd
datos = {'nombre':['María', 'Luis', 'Carmen', 'Antonio'],
'edad':[18, 22, 20, 21], 'grado':['Economía', 'Medicina',
'Arquitectura', 'Economía'], 'correo':['[email protected]',
'[email protected]', '[email protected]', '[email protected]']}
df = pd.DataFrame(datos)
print(df)
Para crear un DataFrame a partir de una lista de listas con los datos de las
columnas se utiliza el siguiente método:
import pandas as pd
print(df)
Nombre Edad
0 María 18
1 Luis 22
2 Carmen 20
Creación de un DataFrame a partir de una lista de diccionarios
import pandas as pd
df = pd.DataFrame([{'Nombre':'María', 'Edad':18},
{'Nombre':'Luis', 'Edad':22}, {'Nombre':'Carmen'}])
print(df)
0 María 18.0
1 Luis 22.0
2 Carmen NaN
Creación de un DataFrame a partir de un array
import pandas as pd
print(df)
a b c
import pandas as pd
# Importación del fichero datos-colesteroles.csv
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesteroles.csv', sep=';', decimal=',')
print(df.head())
Exportación de ficheros
● 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 una serie con los tipos de datos de las columnas
del DataFrame df.
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14 entries, 0 to 13
df.shape()
# (14, 6)
df.size()
# 84
df.columns()
df.index
df.dtypes
# nombre object
edad int64
sexo object
peso float64
altura float64
colesterol float64
dtype: object
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.loc[2, 'colesterol']
# 191
print(df.rename(columns={'nombre':'nombre y apellidos',
'altura':'estatura'}, index={0:1000, 1:1001, 2:1002}))
...
Reindexar un DataFrame
Para reordenar los índices de las filas y las columnas de un DataFrame, así
como añadir o eliminar índices, se utiliza el siguiente método:
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.iloc[1, 3])
# 65
print(df.iloc[1, :2])
edad 32
Acceso a los elementos mediante nombres
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.loc[2, 'colesterol'])
# 191
print(df.loc[:3, ('colesterol','peso')])
colesterol peso
1 232.0 65.0
2 191.0 NaN
3 200.0 65.0
print(df['colesterol'])
0 182.0
1 232.0
2 191.0
3 200.0
...
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df)
...
Puesto que los datos de una misma columna de un DataFrame son del
mismo tipo, es fácil aplicar la misma operación a todos los elementos de
la columna.
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df['altura']*100)
0 179
1 173
2 181
...
print(df['sexo']=='M')
0 False
1 True
2 False
...
Aplicar funciones a columnas.
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df['altura'].apply(log))
0 0.582216
1 0.548121
2 0.593327
...
import pandas as pd
df = pd.DataFrame({'Name': ['María', 'Carlos', 'Carmen'],
'Nacimiento':['05-03-2000', '20-05-2001', '10-12-1999']})
1 2001-05-20
2 1999-12-10
Al igual que para las series, los siguientes métodos permiten resumir la
información de un DataFrame por columnas:
● df.min() : Devuelve una serie con los menores de los datos de las
columnas del DataFrame df.
● df.max() : Devuelve una serie con los mayores de los datos de las
columnas del DataFrame df.
● df.mean() : Devuelve una serie con las media de los datos de las
columnas del DataFrame df cuando los datos son de un tipo
numérico.
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.describe())
print(df.describe(include='object'))
nombre sexo
count 14 14
unique 14 2
freq 1 8
Eliminar columnas de un DataFrame
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
edad = df.pop('edad')
print(df)
...
print(edad)
0 18
1 32
2 24
...
Operaciones con las filas de un DataFrame
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.tail())
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.drop([1, 3]))
...
Una operación bastante común con un DataFrame es obtener las filas que
cumplen una determinada condición.
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
Ordenar un DataFrame
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.sort_values('colesterol'))
nombre edad sexo peso altura
colesterol
...
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.dropna())
...
Agrupaciones de un DataFrame
imagen:fuente propia
Dividir un DataFrame en grupos
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.groupby('sexo').groups)
print(df.groupby(['sexo','edad']).groups)
● df.groupby(columnas).get_group(valores) : Devuelve un
DataFrame con las filas del DataFrame df que cumplen que las
columnas de la lista columnas presentan los valores de la
tupla valores. La lista columnas y la tupla valores deben tener el
mismo tamaño.
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.groupby('sexo').get_group('M'))
import pandas as pd
df = pd.read_csv(
'https://raw.githubusercontent.com/asalber/manual-
python/master/datos/colesterol.csv')
print(df.groupby('sexo').agg(np.mean))
sexo
imagen:fuente propia
Convertir un DataFrame a formato largo
● df.melt(id_vars=id-columnas, value_vars=columnas,
var_name=nombre-columnas, var_value=nombre-valores) :
df = pd.DataFrame(datos)
print(df1)
print(df1.pivot(index='nombre', columns='asignatura',
values='nota'))
nombre
https://pandas.pydata.org/pandas-docs/stable/
https://www.youtube.com/watch?v=k7akrCQ0VyM