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 “Panel 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 “dict” 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 “Panel 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 “S” 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([‘Navas’,‘Mbappe’,‘Neymar’,‘Messi’], 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:
    ‘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]

  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’Luis Suarez’, b’Delantero’, 185., 7),
(b’Jorge Molina’, b’Delantero’, 187., 7),
(b’Antonio Puertas’, b’Centrocampista’, 185., 5),
(b’German Sanchez’, b’Defensa’, 187., 2),
(b’Luis Milla’, b’Centrocampista’, 175., 2),
(b’Luis Manuel Arantes Maximiano’, b’Portero’, 190., 0)],
dtype=[(‘Jugador’, ‘S30’), (‘Posicion’, ‘S15’), (‘Altura’, ‘<f4’), (‘Goles’, ‘<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

[{‘Altura’: 185,
‘Goles’: 7,
‘Jugador’: ‘Luis Suárez’,
‘Posicion’: ‘Delantero’},
{‘Altura’: 187,
‘Goles’: 7,
‘Jugador’: ‘Jorge Molina’,
‘Posicion’: ‘Delantero’},
{‘Altura’: 185,
‘Goles’: 5,
‘Jugador’: ‘Antonio Puertas’,
‘Posicion’: ‘Centrocampista’},
{‘Altura’: 187,
‘Goles’: 2,
‘Jugador’: ‘Germán Sánchez’,
‘Posicion’: ‘Defensa’},
{‘Altura’: 175,
‘Goles’: 2,
‘Jugador’: ‘Luis Milla’,
‘Posicion’: ‘Centrocampista’},
{‘Altura’: 190,
‘Goles’: 0,
‘Jugador’: ‘Luís Manuel Arantes Maximiano’,
‘Posicion’: ‘Portero’}]

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

{‘Altura’: 9 185
23 187
10 185
6 187
5 175
1 190
dtype: int64, ‘Goles’: 9 7
23 7
10 5
6 2
5 2
1 0
dtype: int64, ‘Jugador’: 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, ‘Posicion’: 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: