La librería pandas nos permite la creación y manejo de series y dataframes.
Vamos a verlo con unos ejemplos:
## PANDAS - CREACIÓN Y MANEJO DE SERIES Y DATAFRAMES ##
## Series ##
# Importamos la librería:
import pandas as pd
# Creamos una serie de notas utilizando como índice las asignaturas:
asignaturas = ['matemáticas', 'física', 'historia', 'literatura']
notas = [8, 6, 7, 9]
serieNotas = pd.Series(notas, index = asignaturas)
# Mostramos las asignaturas cuyas notas son igual o mayor que 8:
serieNotas[serieNotas >= 8]
# Le ponemos un nombre a la serie:
serieNotas.name = 'Serie de notas'
# Le ponemos un nombre al índice de la serie:
serieNotas.index.name = 'Serie de notas'
# Convertimos una serie en un diccionario:
diccionario = serieNotas.to_dict()
# Convertimos un diccionario en una serie:
serie = pd.Series(diccionario)
# Utilizamos dos series y calculamos la media de sus valores:
asignaturas = ['matemáticas', 'física', 'historia', 'literatura']
notas1 = [8, 6, 7, 9]
serieNotas1 = pd.Series(notas1, index = asignaturas)
notas2 = [2, 3, 4, 5]
serieNotas2 = pd.Series(notas2, index = asignaturas)
serieNotasMedia = (serieNotas1 + serieNotas2) / 2
## Dataframes ##
# Importamos la librería webbrowser, que nos permitirá abrir una página web desde Python:
import webbrowser
# Abrimos una página web con datos para utilizar en un dataframe:
website = 'https://es.wikipedia.org/wiki/Anexo:Campeones_de_la_NBA'
webbrowser.open(website)
# Creamos un dataframe a partir de los datos que tengamos en el porta papeles (seleccionar y copiar):
dataframeNBA = pd.read_clipboard()
# Obtenemos los nombres de las columnas:
dataframeNBA.columns
# Mostramos los datos sólo de una columna en concreto:
dataframeNBA['Campeón del Oeste']
# Mostramos la fila número 5:
dataframeNBA.loc[5]
# Mostramos las 5 primeras filas:
dataframeNBA.head()
# Mostramos las 5 últimas filas:
dataframeNBA.tail()
# Creamos un dataframe a partir de un diccionario:
listaAsignaturas = ['Lenguaje', 'Matemáticas', 'Conocimiento']
listaNotas = [4, 5, 6]
diccionario = {'Asignaturas':listaAsignaturas, 'Notas':listaNotas}
dataframe = pd.DataFrame(diccionario)
## Índices ##
# Obtenemos los índices de una serie:
indices = ['a', 'b', 'c', 'd']
valores = [8, 6, 7, 9]
serie = pd.Series(valores, index = indices)
serie.index
# Obtenemos el primer índice:
serie.index[0]
# Creamos un dataframe a partir de listas y obtenemos los índices:
listaIndices = ['Lenguaje', 'Matemáticas', 'Conocimiento']
listaColumnas = ['Antonio', 'María', 'Pedro']
listaValores = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
dataframe = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe.index
# Obtenemos el primer índice:
dataframe.index[0]
## Eliminar elementos ##
# Eliminamos un elemento concreto de una serie:
serie = pd.Series(np.arange(4), index = ['a', 'b', 'c', 'd'])
serie.drop('c')
# Eliminamos una fila y una columna concreta de un dataframe:
listaIndices = ['a', 'b', 'c']
listaColumnas = ['c1', 'c2', 'c3']
listaValores = np.arange(9).reshape(3, 3)
dataframe = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe.drop('c2', axis = 1)
## Seleccionar datos en series ##
# Accedemos a un índice concreto de una serie:
indices = ['a', 'b', 'c', 'd']
valores = [8, 6, 7, 9]
serie = pd.Series(valores, index = indices)
serie['b']
# Seleccionamos los índices del 0 al 2:
serie[0:2]
# Seleccionamos un rango de índices específicos:
serie['a':'c']
# Seleccionamos los valores que sean mayor a 3:
serie[serie > 3]
# Seleccionamos los valores que sean mayor a 3 y los cambiamos por un 6:
serie[serie > 3] = 6
## Seleccionar datos en dataframes ##
# Seleccionamos una columna conctreta:
listaIndices = ['a', 'b', 'c']
listaColumnas = ['c1', 'c2', 'c3']
listaValores = np.arange(9).reshape(3, 3)
dataframe = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe['c2']
# Seleccionamos un valor concreto especificando columna e índice:
dataframe['c2', 'a']
# Seleccionamos un valor concreto especificando índice y columna:
dataframe.loc['b']['c2']
# Seleccionamos dos columnas concretas:
dataframe[['c2', 'c3']]
# Seleccionamos las filas cuyo valor en la columna 2 sea mayor que 5:
dataframe[dataframe['c2'] > 5]
# Obtenemos el dataframe con trues para los valores mayores de 20 y false para los que no:
dataframe > 20
# Seleccionamos la fila completa de un índice concreto:
dataframe.loc['b']
## Operaciones ##
# Sumamos los valores de dos series:
indices = ['a', 'b', 'c', 'd']
valores1 = [8, 6, 7, 9]
valores2 = [8, 6, 7, 9]
serie1 = pd.Series(valores1, index = indices)
serie2 = pd.Series(valores2, index = indices)
serie1 + serie2
# Sumamos los valores de dos dataframes:
listaIndices = ['a', 'b', 'c']
listaColumnas = ['c1', 'c2', 'c3']
listaValores = np.arange(9).reshape(3, 3)
dataframe1 = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe2 = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe1 + dataframe2
# Sumamos los valores de dos dataframes, rellenando los valores nulos con ceros:
dataframe1.add(dataframe2, fill_value = 0)
## Ordenación y Clasificación en Series ##
# Ordenamos una serie por sus índices:
indices = ['C', 'B', 'A', 'D']
valores = [8, 6, 7, 9]
serie = pd.Series(valores, index = indices)
serie.sort_index()
# Ordenamos una serie por sus valores:
serie.sort_values()
# Asignamos a cada valor de la lista una posición en un ranking respecto al valor de las demás:
serie.rank()
## Estadísticas en dataframes ##
# Sumamos los valores de todas las filas (índices), obteniendo una sola fila con la suma de todos los valores:
listaIndices = ['1', '2', '2']
listaColumnas = ['c1', 'c2', 'c3']
listaValores = np.arange(9).reshape(3, 3)
dataframe = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
dataframe.sum()
# Sumamos los valores de todas las columnas, obteniendo una sola columna con el mismo número de filas (índices):
dataframe.sum(axis = 1)
# Obtenemos el mínimo valor de cada columna:
dataframe.min()
# Obtenemos el máximo valor de cada columna:
dataframe.max()
# Obtenemos el máximo valor de cada fila:
dataframe.max(axis = 1)
# Obtenemos, para cada columna, el nombre del índice (fila) donde se encuentra el menor valor:
dataframe.idxmin()
# Obtenemos los estadísticos básicos del dataframe:
dataframe.describe()
## Valores nulos ##
# Creamos una serie de 4 valores con uno de ellos nulo:
listaValores = ['1', '2', np.nan, '4']
serie = pd.Series(listaValores, index = list('abcd'))
# Devolvemos verdadero o falso para cada valor dependiendo de si es nulo o no:
serie.isnull()
# Eliminamos de la serie los valores nulos:
serie = serie.dropna()
# Creamos un dataframe con algunos valores nulos:
listaValores = [[1, 2, 3], [4, np.nan, 5], [6, 7, np.nan]]
listaIndices = list('123')
listaColumnas = list('abc')
dataframe = pd.DataFrame(listaValores, index = listaIndices, columns = listaColumnas)
# Devolvemos verdadero o falso para cada valor dependiendo de si es nulo o no:
dataframe.isnull()
# Eliminamos todas las filas que contengan algún valor nulo:
dataframe = dataframe.dropna()
# Sustituimos todos los valores nulos por 0:
dataframe = dataframe.fillna(0)
## Jerarquía de Índices ##
# Creamos una serie con doble índice:
listaValores = np.random.rand(6)
listaIndices = [[1, 1, 1, 2, 2, 2], ['a', 'b', 'c', 'a', 'b', 'c']]
serie = pd.Series(listaValores, index = listaIndices)
# Seleccionamos de la serie el primer índice 1 (devuelve los 3 valores que tienen el índice 1):
serie[1]
# Seleccionamos un valor concreto a partir de ambos índices:
serie[1]['b']
# Creamos un dataframe a partir de una serie de doble índice (el primer índice será índice también, el segundo índice serán las columnas):
dataframe = serie.unstack()
# Creamos una serie de doble índice a partir de un dataframe:
serie = dataframe.stack()
Y eso es todo.
No hay comentarios:
Publicar un comentario