No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Series y DataFrames en Pandas

11/24
Recursos

Ya entendiste los conceptos b谩sicos de Numpy, ahora hay que entender como funciona la librer铆a de Pandas, esta nos ayuda a hacer una mejor exploraci贸n y an谩lisis de los datos.

Pandas

Pandas es una librer铆a de Python especializada en el manejo y an谩lisis de estructuras de datos. El nombre viene de 鈥淧anel data鈥.

鈥 Velocidad
鈥 Poco c贸digo
鈥 M煤ltiples formatos de archivos
鈥 Alineaci贸n inteligente

Pandas Series

Es muy parecido a un array de una dimensi贸n (o vector) de NumPy.

鈥 Arreglo unidimensional indexado
鈥 B煤squeda por 铆ndice
鈥 Slicing
鈥 Operaciones aritm茅ticas
鈥 Distintos tipos de datos

Pandas DataFrame

Muy parecido a las estructuras matriciales trabajadas con NumPy.

鈥 Estructura principal
鈥 Arreglo de dos dimensiones
鈥 B煤squeda por 铆ndice (columnas o filas)
鈥 Slicing
鈥 Operaciones aritm茅ticas
鈥 Distintos tipos de datos
鈥 Tama帽o variable

Series

Es un arreglo unidimensional indexado

import pandas as pd

Definiendo una lista con 铆ndices espec铆ficos

psg_players = pd.Series(['Navas','Mbappe','Neymar','Messi'], index=[1,7,10,30])

psg_players 
---> 1      Navas
     7     Mbappe
     10    Neymar
     30     Messi
     dtype: object         

B煤squeda por 铆ndices

dict = {1: 'Navas', 7: 'Mbappe', 10: 'Neymar', 30:'Messi'}
pd.Series(dict)
---> 1 Navas
7 Mbappe
10 Neymar
30 Messi
dtype: object

psg_players[7]
----> 'Mbappe'

B煤squeda mediante Slicing

psg_players[0:3]
-----> 0     Navas
       1    Mbappe
       2    Neymar
    dtype: object

Pandas

Similar a la estructura matricial

dict = {'Jugador':['Navas','Mbappe','Neymar','Messi'],
 'Altura':[183.0, 170.0, 170.0, 163.0],
  'Goles':[2, 200, 150, 500]}
df_players = pd.DataFrame(dict, index=[1,7,10,30])
--->   Jugador Altura Goles
        1 Navas    183    2
        7 Mbappe   170    200
        10 Neymar   170    150
        30 Messi    163    500

B煤squeda por 铆ndices. Columnas

df_players.columns
---> Index(['Jugador', 'Altura', 'Goles'], dtype='object')

B煤squeda por 铆ndice.

df_players.index
------> RangeIndex(start=0, stop=4, step=1)

Reto

Descarga este DataFrame de Granada FC

  • Crea tus propios DataFrames, con los 铆ndices que quieras y comparte tus resultados.

Contribuci贸n creada por:聽Edward Giraldo.

Aportes 36

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Me parece que no habr铆a que usar 鈥渄ict鈥 como nombre de variable ya que es una palabra reservada del lenguaje.

La clase estuve muy bien. Solo tengo un comentario. Al minuto 11:25 se vuelve a repetir una parte del v铆deo.

Mi aporte futbolero :v鈿

PANDAS

Manipulaci贸n y an谩lisis de datos. El nombre viene de 鈥淧anel data鈥.
鈥 Velocidad
鈥 Poco c贸digo
鈥 M煤ltiples formatos de archivos
鈥 Alineaci贸n inteligente

Pandas Series

Es muy parecido a un array de una dimensi贸n (o vector) de NumPy.
鈥 Arreglo unidimensional indexado
鈥 B煤squeda por 铆ndice
鈥 Slicing
鈥 Operaciones aritm茅ticas
鈥 Distintos tipos de datos

Pandas DataFrame

Muy parecido a las estructuras matriciales trabajadas con NumPy.
鈥 Estructura principal
鈥 Arreglo de dos dimensiones
鈥 B煤squeda por 铆ndice (columnas o filas)
鈥 Slicing
鈥 Operaciones aritm茅ticas
鈥 Distintos tipos de datos
鈥 Tama帽o variable

Tambi茅n se pueden construir DataFrames con listas que contengan diccionarios:

Messu=Messi + Siiuuuuuuuu

(enlace del notion donde recopilo aportes de la clase)

Series y Dataframes

PANDAS

Pandas es una librer铆a de Python especializada en el manejo y an谩lisis de estructuras de datos. Se caracterisa por su:

鈥 Velocidad

鈥 Poco c贸digo

鈥 M煤ltiples formatos de archivos

鈥 Alineaci贸n inteligente

Crear una serie

  • Serie con index personalizado
psdg_players = pd.Series(
['Navas','Mbappe','Neymar','Messi'],
index=[1,7,10,30]
)
psdg_players
  • Serie con index default
psdg_players = pd.Series(['Navas','Mbappe','Neymar','Messi'])
psdg_players
  • Serie con diccionario JSON
dictionary = {1: 'Navas', 7:'Mbappe', 10:'Neymar', 30:'Messi'}
pd.Series(dictionary)

Slicing

# Funciona igual que Numpy
psdg_players[0:3]

Dataframe Matricial

dictionary = {'jugador':['Navas','Mbappe','Neymar','Messi'],
'altura':[183.0, 170.0, 170.0, 165.0],
'goles':[2, 200, 200, 200]
}
  • Dataframe con index personalizado
pd.DataFrame(dictionary, index=[1,7,10,30])
  • Dataframe con index default
pd.DataFrame(dictionary)

Visualizar Ejes DataFrame

df_Players = pd.DataFrame(dictionary)
df_Players
  • Visualziar Data por Columnas
df_Players.columns
  • Visualizar Data por Indices
    • Indice default

      df_Players.index
      
    • Indice Personalizado

      df_Players = pd.DataFrame(dictionary, index=[1,7,10,30])
      df_Players.index
      

Reto

  • Aplicar lo aprendido en clases con el JSON dado
dataframe_reto = {
'Jugador':['Luis Su谩rez','Jorge Molina', 'Antonio Puertas', 'Germ谩n S谩nchez', 'Luis Milla', 'Lu铆s Manuel Arantes Maximiano'],
'Posici贸n':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],
'N煤mero':[9, 23, 10, 6, 5, 1],
'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],
'Goles':[7, 7, 5, 2, 2, 0]
}
#Compruebo que el largo del JSON este bien en todos los arrays
for i in dataframe_reto:
	print(len(dataframe_reto[i]))
granadaCF_players = pd.DataFrame(dataframe_reto, index=dataframe_reto['N煤mero'])
granadaCF_players

As铆 les quedar铆a en el notion

Comparto mi aporte, aunque no es del granada fc

<code> formula1 = pd.DataFrame(
    {
        'Nombre':['Charles Leclerc','Carlos Sainz','Lewis Hamilton','George Russell', 'Max Verstapen','Sergio Perez','Lando Norris', 'Daniel Ricciardo'],
        'Equipo':['Ferrari','Ferrari','Mercedes','Mercedes','RedBull','RedBull','Mclaren','Mclaren'],
        'Pais':['Monaco','Espa帽a','Reino Unido','Reino Unido','Paises Bajos','Mexico','Reino Unido', 'Australia'],
        'Edad':['24','27','37','24','24','32','22','32'],
        'Numero':['16','55','44','63','1','11','4','3'],
        'Podios':['16','8','183','2','53','12','3','32'],
        'Victorias':['4','0','103','0','21','2','0','8']
    }
)
formula1  

Pandas 馃惣

Pandas es una librer铆a de Python especializada en el manejo y an谩lisis de estructuras de datos

Pandas 鈫 Analitica, manipulacion y procesamiento de datos
[Panel Data]

Import pandas as pd

Series y DataFrames
1ero
鉁 Parecido a arrays 1 Dimendios
2do 鉁 Array pero de forma matricial
[ Col 鈫 Indice ; Fil 鈫 clave ] es como un diccionario

鈽戯笍 Velocidad
鈽戯笍 Poco c贸digo
鈽戯笍 M煤ltiples formatos de archivos
鈽戯笍 Alineaci贸n inteligente

Exploraci贸n de un pandas DataFrame

En la clase conocimos la estructura central de pandas, el DataFrame, que permite almacenar datos tabulares: cada fila es una observaci贸n y cada columna una propiedad. Aqu铆 voy a enlistar los tres m茅todos que considero m谩s 煤tiles para familizarte con un nuevo DataFrame con el que est茅s comenzando a trabajar.
.

M茅todo .head()

脡ste m茅todo permite ver, por defecto, las cinco primeras filas de un DataFrame. Por supuesto, puedes pasar como argumento el n煤mero de filas que deseas ver.
.

.

M茅todo .info()

Este m茅todo te muestra los nombres de las columnas del DataFrame, la cantidad de valores nulos en cada una y el data type que contienen.
.

.

M茅todo .describe()

Devuelve un DataFrame con estad铆sticos b谩sicos para cada columna de tu DataFrame original. Es epecialmente 煤til para columnas que contienen datos num茅ricos.
.

Algunas de las caracter铆sticas de Pandas DataFrame son:

  • Arrays con estructura matricial
  • B煤squeda por 铆ndice (columnas o filas)
  • Slicing
  • Operaciones aritm茅ticas
  • Distintos tipos de datos
  • Tama帽o variable

Algo curioso que not茅 es que al momento de llamar a pd.Series es necesario que la 鈥淪鈥 de Series est茅 en may煤scula. De lo contrario no lo reconoce.

Series

  • Es un arreglo unidimensional indexado
import pandas as pd

#definiendo una lista con indices especificos
psg_players = pd.Series(['Navas','Mbappe','Neymar','Messi'],
              index=[1,7,10,30])
psg_players ----> 1      Navas
									7     Mbappe
									10    Neymar
									30     Messi
									dtype: object
  • Permite hacer busqueda por indices
psg_players[2]
-----> 'Neymar'
  • Busqueda mediante Slicing
psg_players[0:3]
-----> 0     Navas
			 1    Mbappe
       2    Neymar
			 dtype: object

Pandas

  • Similar a la estrucutra matricial. Arreglo de dos dimensiones
dict = {'Jugador':['Navas','Mbappe','Neymar','Messi'],
 'Altura':[183.0, 170.0, 170.0, 163.0],
  'Goles':[2, 200, 150, 500]}
df_players = pd.DataFrame(dict)
----->   Jugador Altura Goles
			 0 Navas    183    2
			 1 Mbappe   170    200
			 2 Neymar   170    150
			 3 Messi    163    500
  • Busqueda por indices. Columnas
df_players.columns
------> Index(['Jugador', 'Altura', 'Goles'], dtype='object')

  • Busqueda por indice.
df_players.index
------> RangeIndex(start=0, stop=4, step=1)

El poder transformar una serie (una lista de datos), a un DataFrame, parece algo muy b谩sico y simple, pero es de demasiada utilidad cuando empiezas a trabajar con procesos de ETL.

Muchas veces escribo lo mismo que el profesor y me da error. Luego copio y pego y mes sale.

En este caso psg_players = pd.Series([鈥楴avas鈥,鈥楳bappe鈥,鈥楴eymar鈥,鈥楳essi鈥橾, index=[1,7,10,30])

Me aparece que index no esta definido

tarea = pd.DataFrame({'Jugador':['Luis Su脙隆rez','Jorge Molina', 'Antonio Puertas', 'Germ脙隆n S脙隆nchez', 'Luis Milla', 'Lu脙颅s Manuel Arantes Maximiano'],

'Posici脙鲁n':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],

'N脙潞mero':[9, 23, 10, 6, 5, 1],

'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],

'Goles':[7, 7, 5, 2, 2, 0]})

tarea["Altura"] > 185

tarea1 = tarea[['Altura', 'Goles']]
tarea1
tarea1.shape
dataFrame_granada = pd.DataFrame({'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis  Arantes '],

                      'Posicion':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],

                      'Numero':[9, 23, 10, 6, 5, 1],

                      'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],

                      'Goles':[7, 7, 5, 2, 2, 0]
                  })
dataFrame_granada

# muestra a los jugadores que tienen 5 o mas goles
goleador = dataFrame_granada.where(dataFrame_granada.Goles>=5)
goleador
  • Primero estrcuturamos en un diccionario los datos de los jugadores - granadas.

  • Luego procederemos a crear el dataframe.

Reto

Aqu铆 el DataFrame del Granada FC

Llevarlo a la estructura DataFrame de Pandas

DataFrame

Acceder a los datos por medio del index

Series por medio de diccionario

Series

Pr谩ctica en colab

Algunas de las caracter铆sticas de Pandas series son:

  • Arreglo unidimensional indexado
  • B煤squeda por 铆ndice
  • Slicing
  • Operaciones aritm茅ticas
  • Distintos tipos de datos

Pandas DataFrame

Pandas series

Yo me puse a ordenarlo por el n煤mero de la camiseta:

dict = {
'Numero': [9, 23, 10, 6, 5, 1],

'Jugador':['Lu铆s Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Lu铆s Milla', 'Lu铆颅s Manuel Arantes Maximiano'],

'Posicion':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],

'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],

'Goles':[7, 7, 5, 2, 2, 0]
}

df_GranadaTeam = pd.DataFrame(dict)
df_GranadaTeam.sort_values('Numero')

Hay distintas formas de crear un data frame, alguno de ellos.

  1. Desde un diccionario de listas (metodo visto en clase).

  2. Desde una matriz estructurada o de registros.

  3. Desde una lista de diccionarios.

  4. Desde una lista de series.
    Fuente https://pandas.pydata.org/docs/user_guide/dsintro.html
    DATOS:
    鈥楯ugador鈥:[鈥楲uis Su谩rez鈥,鈥楯orge Molina鈥, 鈥楢ntonio Puertas鈥, 鈥楪erm谩n S谩nchez鈥, 鈥楲uis Milla鈥, 鈥楲u铆s Manuel Arantes Maximiano鈥橾
    鈥楶osici贸n鈥:[鈥楧elantero鈥, 鈥楧elantero鈥, 鈥楥entrocampista鈥, 鈥楧efensa鈥, 鈥楥entrocampista鈥, 鈥楶ortero鈥橾
    鈥楴煤mero鈥:[9, 23, 10, 6, 5, 1]
    鈥楢ltura鈥:[185.0, 187.0, 185.0, 187.0, 175.0, 190.0]
    鈥楪oles鈥:[7, 7, 5, 2, 2, 0]

  5. Desde un diccionario de listas (metodo visto en clase)

import pandas as pd
dictDeListas = {'Jugador':['Luis Su谩rez','Jorge Molina', 'Antonio Puertas', 'Germ谩n S谩nchez', 'Luis Milla', 'Lu铆s Manuel Arantes Maximiano'],
 'Posicion':['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero'],
 'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],
 'Goles':[7, 7, 5, 2, 2, 0]
 }  
df_dictDeListas = pd.DataFrame(dict_granadafc,index=[9, 23, 10, 6, 5, 1])
df_dictDeListas
  1. Desde una matriz estructurada NUMPY
    Defino la estructura y los elemento de la matriz NUMPY
import numpy as np
npMatiz6x4 = np.zeros((6,), dtype=[("Jugador", "a30"), ("Posicion", "a15"), ("Altura", "f4"), ("Goles", "i4")])
npMatiz6x4[:] = [("Luis Suarez","Delantero",185.0,7),("Jorge Molina","Delantero",187.0,7),("Antonio Puertas","Centrocampista",185.0,5),("German Sanchez","Defensa",187.0,2),("Luis Milla","Centrocampista",175.0,2),("Luis Manuel Arantes Maximiano","Portero",190.0,0)]
npMatiz6x4

array([(b鈥橪uis Suarez鈥, b鈥橠elantero鈥, 185., 7),
(b鈥橨orge Molina鈥, b鈥橠elantero鈥, 187., 7),
(b鈥橝ntonio Puertas鈥, b鈥機entrocampista鈥, 185., 5),
(b鈥橤erman Sanchez鈥, b鈥橠efensa鈥, 187., 2),
(b鈥橪uis Milla鈥, b鈥機entrocampista鈥, 175., 2),
(b鈥橪uis Manuel Arantes Maximiano鈥, b鈥橮ortero鈥, 190., 0)],
dtype=[(鈥楯ugador鈥, 鈥楽30鈥), (鈥楶osicion鈥, 鈥楽15鈥), (鈥楢ltura鈥, 鈥<f4鈥), (鈥楪oles鈥, 鈥<i4鈥)])

df_npMatiz6x4 = pd.DataFrame(npMatiz6x4,index=[9, 23, 10, 6, 5, 1])
#np_Matiz6x4
  1. Desde una lista de diccionarios
listadic = [{"Jugador":"Luis Su谩rez","Posicion":"Delantero","Altura":185,"Goles":7},
          {"Jugador":"Jorge Molina","Posicion":"Delantero","Altura":187,"Goles":7},
          {"Jugador":"Antonio Puertas","Posicion":"Centrocampista","Altura":185,"Goles":5},
          {"Jugador":"Germ谩n S谩nchez","Posicion":"Defensa","Altura":187,"Goles":2},
          {"Jugador":"Luis Milla","Posicion":"Centrocampista","Altura":175,"Goles":2},
          {"Jugador":"Lu铆s Manuel Arantes Maximiano","Posicion":"Portero","Altura":190,"Goles":0}]

listadic

[{鈥楢ltura鈥: 185,
鈥楪oles鈥: 7,
鈥楯ugador鈥: 鈥楲uis Su谩rez鈥,
鈥楶osicion鈥: 鈥楧elantero鈥檥,
{鈥楢ltura鈥: 187,
鈥楪oles鈥: 7,
鈥楯ugador鈥: 鈥楯orge Molina鈥,
鈥楶osicion鈥: 鈥楧elantero鈥檥,
{鈥楢ltura鈥: 185,
鈥楪oles鈥: 5,
鈥楯ugador鈥: 鈥楢ntonio Puertas鈥,
鈥楶osicion鈥: 鈥楥entrocampista鈥檥,
{鈥楢ltura鈥: 187,
鈥楪oles鈥: 2,
鈥楯ugador鈥: 鈥楪erm谩n S谩nchez鈥,
鈥楶osicion鈥: 鈥楧efensa鈥檥,
{鈥楢ltura鈥: 175,
鈥楪oles鈥: 2,
鈥楯ugador鈥: 鈥楲uis Milla鈥,
鈥楶osicion鈥: 鈥楥entrocampista鈥檥,
{鈥楢ltura鈥: 190,
鈥楪oles鈥: 0,
鈥楯ugador鈥: 鈥楲u铆s Manuel Arantes Maximiano鈥,
鈥楶osicion鈥: 鈥楶ortero鈥檥]

df_listadic = pd.DataFrame(listadic,index=[9, 23, 10, 6, 5, 1])
#df_listadic
  1. Desde una lista de series
listaSeries = {
      "Jugador" : pd.Series(["Luis Su谩rez","Jorge Molina","Antonio Puertas","Germ谩n S谩nchez","Luis Milla","Lu铆s Manuel Arantes Maximiano"],index=[9, 23, 10, 6, 5, 1]),
      "Posicion": pd.Series(["Delantero","Delantero","Centrocampista","Defensa","Centrocampista","Portero"],index=[9, 23, 10, 6, 5, 1]),
      "Altura"  : pd.Series([185,187,185,187,175,190],index=[9, 23, 10, 6, 5, 1]),
      "Goles"   : pd.Series([7,7,5,2,2,0],index=[9, 23, 10, 6, 5, 1])
}
listaSeries

{鈥楢ltura鈥: 9 185
23 187
10 185
6 187
5 175
1 190
dtype: int64, 鈥楪oles鈥: 9 7
23 7
10 5
6 2
5 2
1 0
dtype: int64, 鈥楯ugador鈥: 9 Luis Su谩rez
23 Jorge Molina
10 Antonio Puertas
6 Germ谩n S谩nchez
5 Luis Milla
1 Lu铆s Manuel Arantes Maximiano
dtype: object, 鈥楶osicion鈥: 9 Delantero
23 Delantero
10 Centrocampista
6 Defensa
5 Centrocampista
1 Portero
dtype: object}

df_listaSeries = pd.DataFrame(listaSeries)
#df_listaSeries

Excelente clase

My challenge: