La clase estuve muy bien. Solo tengo un comentario. Al minuto 11:25 se vuelve a repetir una parte del vídeo.
Librerías de manipulación de datos con Python
¿Por qué NumPy y Pandas?
NumPy
NumPy Array
Tipos de datos
Dimensiones
Creando arrays
Shape y Reshape
Funciones principales de NumPy
Copy
Condiciones
Operaciones
Quiz: NumPy
Pandas
Series y DataFrames en Pandas
Leer archivos CSV y JSON con Pandas
Filtrado con loc y iloc
Agregar o eliminar datos con Pandas
Manejo de datos nulos
Filtrado por condiciones
Funciones principales de Pandas
groupby
Combinando DataFrames
Merge y Concat
Join
Pivot y Melt
Apply
Quiz: Pandas
Cierre
Posibilidades con Pandas y NumPy
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Adquiere por un año todos los cursos, escuelas y certificados por un precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
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 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
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
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
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
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)
Descarga este DataFrame de Granada FC
Contribución creada por: Edward Giraldo.
Aportes 118
Preguntas 7
La clase estuve muy bien. Solo tengo un comentario. Al minuto 11:25 se vuelve a repetir una parte del vídeo.
Me parece que no habría que usar “dict” como nombre de variable ya que es una palabra reservada del lenguaje.
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
Messu=Messi + Siiuuuuuuuu
También se pueden construir DataFrames con listas que contengan diccionarios:
(enlace del notion donde recopilo aportes de la clase)
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
psdg_players = pd.Series(
['Navas','Mbappe','Neymar','Messi'],
index=[1,7,10,30]
)
psdg_players
psdg_players = pd.Series(['Navas','Mbappe','Neymar','Messi'])
psdg_players
dictionary = {1: 'Navas', 7:'Mbappe', 10:'Neymar', 30:'Messi'}
pd.Series(dictionary)
# Funciona igual que Numpy
psdg_players[0:3]
dictionary = {'jugador':['Navas','Mbappe','Neymar','Messi'],
'altura':[183.0, 170.0, 170.0, 165.0],
'goles':[2, 200, 200, 200]
}
pd.DataFrame(dictionary, index=[1,7,10,30])
pd.DataFrame(dictionary)
df_Players = pd.DataFrame(dictionary)
df_Players
df_Players.columns
Indice default
df_Players.index
Indice Personalizado
df_Players = pd.DataFrame(dictionary, index=[1,7,10,30])
df_Players.index
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
Esta parte del curso es toda con datasets.
Les dejo uno que me pareció divertido y me fue muy útil para practicar las clases de este módulo.
Es un dataset de pokemon–>link. Está super bien construido, con muchas columnas de distintos tipos y toda la info perfectamente cargada.
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.
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
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.
.
É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.
.
.
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.
.
.
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.
.
Mi dataframe y mis apuntes aqui
Hola, yo quise hacer un data frame con los jugadores de la selección colombia del mundial 2014 especialmente el partido Colombia vs Uruguay.
<
jugadores_Col_2014 = {
'Nombre':['David Ospina','Cristian Zapata','Mario Yepes','Pablo Armero',
'Juan Zuñiga','Carlos Sanchez','Abel Aguilar','James Rodriguez',
'Juan Guillermo Cuadrado','Teofilo Gutierrez','Jackson Martinez'],
'Posición':['AR','DF','DF','DF','DF','MC','MC','MC','MC','DL','DL'],
'Dorsal' : [1,2,3,7,18,6,8,10,11,9,21],
'Club Actual':['Al-Nassar FC','San Lorenzo de Almagro','Retirado',
'Retirado','Retirado','Santa Fe','Retirado','AL-Rayyan SC',
'Juventus','Deportivo Cali','Retirado'],
}
jugadores_COL_vs_URU_2014 = pd.DataFrame(jugadores_Col_2014)
jugadores_COL_vs_URU_2014
>
–
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
Series
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
psg_players[2]
-----> 'Neymar'
psg_players[0:3]
-----> 0 Navas
1 Mbappe
2 Neymar
dtype: object
Pandas
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
df_players.columns
------> Index(['Jugador', 'Altura', 'Goles'], dtype='object')
df_players.index
------> RangeIndex(start=0, stop=4, step=1)
Aquí mi reto:
.
Aqui les comparto mi DataFrame, lo organice para mostrar jugadores con respecto a los datos.
Hay distintas formas de crear un data frame, alguno de ellos.
Desde un diccionario de listas (metodo visto en clase).
Desde una matriz estructurada o de registros.
Desde una lista de diccionarios.
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]
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
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
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
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
Oye, hay un error. Este video debería estar antes de Cómo cargar archivos en Pandas. Están al revés el 11 y el 12.
Algunas de las características de Pandas DataFrame son:
En esta clase sobre pandas aprendi que los dataframes son estructuras matriciales que nos permiten ver informacion mas compacta y con gran cantidad de elementos. Tambien que se pueden crear a partir de diccionarios y en su defecto a partir tambien de lista de diccionarios, es decir, siempre debe estar el conjunto llave\valor.
.
A continuacion presento mi solucion al reto:
.
No se ingresan por el index como dice el, se accede es por key
chelsea = {'Jugador': ['Drogba','Lampard','Terry','Cech', 'Kanté'],
'dorsal': [11, 8, 26, 1, 7],
'posicion': ['delantero', 'volante 8', 'defensa central', 'arquero','volante recuperador'],
'Pierna': ['derecha', 'derecha', 'derecha', 'izquierda', 'derecha'],
'goles': [164.0, 211.0, 67.0, 0.0, 13.0],
'partidos': [381, 648.0, 717.0, 494.0, 269.0]
}
df.describe()
Número Altura Goles
count 6.000000 6.000000 6.000000
mean 9.000000 184.833333 3.833333
std 7.563068 5.154286 2.926887
min 1.000000 175.000000 0.000000
25% 5.250000 185.000000 2.000000
50% 7.500000 186.000000 3.500000
75% 9.750000 187.000000 6.500000
max 23.000000 190.000000 7.000000
from pandas.core.internals.base import Index
dict2={‘Jugador’:[‘Luis Suárez’,‘Jorge Molina’, ‘Antonio Puertas’, ‘Germán Sánchez’, ‘Luis Milla’, ‘Luis 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]
}
Jugador Posición Número Altura Goles
0 Luis Suárez Delantero 9 185.0 7
1 Jorge Molina Delantero 23 187.0 7
2 Antonio Puertas Centrocampista 10 185.0 5
3 Germán Sánchez Defensa 6 187.0 2
4 Luis Milla Centrocampista 5 175.0 2
5 Luis Manuel Arantes Maximiano Portero 1 190.0
Datos estadísticos extraidos de la tabla:
df[‘Altura’].max()
190.0
df[‘Goles’].min()
0
df[‘Goles’].max()
7
df[‘Altura’].mean()
184.83
df[‘Altura’].median()
186.0
df[‘Altura’].std()
5.15
df[‘Altura’].var()
26.56
data = {
'Nombre': ['Mohamed Salah', 'Sadio Mané', 'Roberto Firmino', 'Virgil van Dijk', 'Trent Alexander-Arnold'],
'Posición': ['Delantero', 'Delantero', 'Delantero', 'Defensa', 'Defensa'],
'Goles en la temporada': [20, 15, 10, 2, 5],
'Asistencias en la temporada': [10, 8, 12, 1, 12],
'G/A en la temporada': [30, 23, 22, 3, 17],
'Valor de mercado': ['€120M', '€100M', '€90M', '€80M', '€75M']
}
dorsales = [11, 10, 9, 4, 66]
df_liverpool = pd.DataFrame(data, index=dorsales)
Desafío listo
Solución al reto:
Mi aporte:
Mi aporte basado en el juego Brawl stars:
Y aquí está el team Granada con sus columnas y indexs… 😃
dict = { '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]
}
pd.DataFrame(dict, index=[9, 23, 10, 6, 5, 1])
granada_player = pd.DataFrame(dict,index=[9, 23, 10, 6, 5, 1])
granada_player.columns
granada_player.index
dict = {
‘jugador’:[‘Luis Suarez’,‘Jorge Molina’, ‘Antonio Puertas’, ‘German Sanchez’, ‘Luis Milla’, ‘Luis 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]
}
El index son los numeros de las camisetas:
df_jugadores= pd.DataFrame(dict, index=[9, 23, 10, 6, 5, 1])
Pandas Series
Pandas DataFrame
import pandas as pd
psg_players = pd.Series(['Navas', 'Mbappe', 'Neymar', 'Messi'],
index=[1,7,10,30]
)
psg_players
pd.Series(['Navas', 'Mbappe', 'Neymar', 'Messi'],
)
dict={1:'Navas',7:'Mbappe',10:'Neymar',30:'Messi'}
pd.Series(dict)
psg_players[0:3]
dict= {'Jugador':['Navas', 'Mbappe', 'Neymar', 'Messi'],
'Altura':[183,170,175,160],
'Goles':[0,200,300,348]
}
df_players=pd.DataFrame(dict)
df_players.columns
df_players.index
dict={‘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’],
‘Altura’:[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],
‘Goles’:[7, 7, 5, 2, 2, 0]
}
estdisticas_granda = pd.DataFrame(dict)
estdisticas_granda
Platzi pratocinando al granada. Wow. Cada vez se superan.
granada = {'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'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]
}
granada_df = pd.DataFrame(granada)
granada_df.set_index('Numero', inplace=True)
granada_df.head()
Hice mi DataFrame con personajes de starwars jeje
<champions_dict = {'Player':['Erling Haland', 'Mohamed Saláh', 'Kylian Mbappe','Joao Mario','Vinicius Jr','Robert Lewandowski','Mehdi Taremi','Rafa Silva','Giacomo Raspadori','Victor Osimhen','Erick Choupo-Moting','Mohammed Kudus','Leroy Sané','Jude Bellingham','Giovani Simeone'],
'Team':['Manchester city','Liverpool','Paris Saint Germain','Benfica','Real Madrid','Barcelona FC','Porto FC','Benfica','Napoli','Napoli','Bayern Munich','Ajax FC','Bayern Munich','Borussia Dortmund','Napoli'],
'Country of player': ['Norway', 'Egypt','France','Portugal','Brazil','Poland','Iran','Portugal','Italy','Nigeria','Cameroon','Ghana','Germany','England','Argentina'],
'GF':[10,8,7,6,6,5,5,5,4,4,4,4,4,4,4],
'PJ':[6,8,8,8,8,5,7,8,5,5,6,6,6,7,7],
'Goals for match':[1.67,1.0,0.88,0.75,0.75,1.0,0.71,0.63,0.80,0.80,0.67,0.67,0.67,0.57,0.57]
df_champions = pd.DataFrame(champions_dict, index = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
df_champions
}>
Mi aporte del reto:
porque pones a messi ultimo -.-
Me parece o este vídeo iba antes que el 12 ?
dict_platzi = {
'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]
}
df_platzi = pd.DataFrame(dict_platzi)
df_platzi
Descarga este DataFrame de Granada FC
Crea tus propios DataFrames, con los índices que quieras y comparte tus resultados
import pandas as pd
dict = {
'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]
}
df_GFC=pd.DataFrame(dict)
df_GCF_players = pd.DataFrame(dict, index=df_GFC['Número'])
df_GCF_players
Jugador Posición Número Altura Goles
Número
9 Luis Suárez Delantero 9 185.0 7
23 Jorge Molina Delantero 23 187.0 7
10 Antonio Puertas Centrocampista 10 185.0 5
6 Germán Sánchez Defensa 6 187.0 2
5 Luis Milla Centrocampista 5 175.0 2
1 Luís Manuel Arantes Maximiano Portero 1 190.0 0
Si quieren acceder a los valores por posición como en las listas y por los indices que definieron traten esto:
# Access values by integer location
print(psg_players.iloc[0]) # Output: Navas
dict_gnd_players = {'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'Posiciónn':['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_gnd_players = pd.DataFrame(dict_gnd_players, index = [9, 23, 10, 6, 5, 1])
df_gnd_players
Los filtre por la altura:
df_gnd_players[df_gnd_players["Altura"]> 185]
A seguir aprendiendo 😃
Utilizando los datos del Granada CF para crear un DataFrame:
import pandas as pd
granada_cf = {
'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'],
'Altura':[185.0, 187.0, 185.0, 187.0, 175.0, 190.0],
'Goles':[7, 7, 5, 2, 2, 0]
}
df_granada = pd.DataFrame(granada_cf, index=[9, 23, 10, 6, 5, 1]) #asignando los números de jugador como índices
df_granada.sort_index(ascending=True) #imprimiendo el DataFrame ordenando por el índice en forma ascendente
Mi aporte es el siguiente:
Cambiándo el indice:
dict_granada_cf = {
'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'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]
}
pd.DataFrame(dict_granada_cf)
My challenge:
Mii Aporte
import pandas as pd
jugadores=['Luis Suárez','Jorge Molina', 'Antonio Puertas', 'Germán Sánchez', 'Luis Milla', 'Luís Manuel Arantes Maximiano']
posiciones=['Delantero', 'Delantero', 'Centrocampista', 'Defensa', 'Centrocampista', 'Portero']
numeros=[9, 23, 10, 6, 5, 1]
alturas=[185.0, 187.0, 185.0, 187.0, 175.0, 190.0]
goles=[7, 7, 5, 2, 2, 0]
df_granadaFc = pd.DataFrame({
'Jugadores':jugadores,
'Posiciones':posiciones,
'altura':alturas,
'goles':goles
},index=numeros)
df_granadaFc
Platzi Challenge
Por el nombre “Numpy” imaginé que se trataba de una librería solo para números y utilizaremos pandas para ello. Ahora se que numpy soporta strings, ¿Porqué nunca lo vimos en las clases?
Ejericicio jugadores del Granada patrocinados por Platzi
Mi codigo para el reto del equipo Granada
import pandas as pd
list_dict = {"jugador":["Luis Suarez",'Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
"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]
}
df_list_dict = pd.DataFrame(list_dict)
df_list_dict
Pandas
Es la librerpia de Python que nos permite trabajar con DataFrames basada en NumPy; maneja dos tipos de datos
my_serie = pd.Series(data)
, admite el parámetro index que nos premite nombrar el índice al momento de declarar la variable; tambien podemos declarar la serie por medio de diccionarios.my_dataframe = pd.DataFrame(data)
A diferencia de NumPy permite almacenar distintos tipos de datos.
Para referirnos a los datos almacenados usamos los indices y el nombre de columnas.

Marca Nombre Tipo combustible Precio
4 Mazda Mazda 2 Hatchback Coriente 75000000
7 Chevrolet Onix Sedan Extra 80000000
41 Renault kwid Mini Suv Extra 52000000
50 Toyota Corolla Cross Suv Extra 119000000
89 Suzuki Jimmy Todo Terreno Corriente 99000000
Reto:
granada_fc = {'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis 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_granada_players = pd.DataFrame(granada_fc, index=[9, 23, 10, 6, 5, 1])
df_granada_players
print(df_granada_players.columns, df_granada_players.index)
Hoy, seis meses después de su lanzamiento, se sigue repitiendo la parte del final. La clase 10/10
Si quieres leer el archivo jugadores_granadacf-1.txt
sin tener que escribir todo el diccionario (que solo es un copiar y pegar).
podrías hacerlo de la siguiente forma:
def load_dict_from_txt(f:str)->dict:
# read file
with open(f) as f:
data = f.read()
# transformations
data = '{'+data+'}'
data = data.replace('\n',',').replace("'",'"').replace(',,',',')
# reconstructing the data as a dictionary
dict_charged = ast.literal_eval(data)
return dict_charged
filename = 'jugadores_granadacf-1.txt'
df_players = pd.DataFrame(load_dict_from_txt(filename))
Solucion a reto
Practicando por mi cuenta
import pandas as pd
A = pd.Series([2, 3, 4, 5], index=['a', 'b', 'c', 'd'])
type(A.values)
# the type is numpy.ndarray
type(A)
# the type is:
# pandas.core.series.Series
grades_dict = {'A': 1, 'B': 2, 'C': 3}
marks_dict = {'A': 32, 'B': 12, 'C': 22}
grads = pd.Series(grades_dict)
marks = pd.Series(marks_dict)
print(grads.values)
print(marks.values)
# the atribute values return the
# values keys of the dictionary
myDataFrame = pd.DataFrame({'Marks': marks, 'Grads': grads})
print(myDataFrame)
# print the table
print(myDataFrame.T)
# invert the column
myDataFrame['ScaledMarks'] = 100*(myDataFrame['Marks'] / 90)
print(myDataFrame)
# add the column ScaledMarks
DataFrame Granada CF
#Dataframe Granada FC
Granada = {'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'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]
}
pd.DataFrame(Granada)
Resolviendo el reto.
import pandas as pd
import matplotlib.pyplot as plt
granada_fc = {
'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luas Manuel Arantes Maximiano'],
'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],
}
## Aplicando del datFrame
data_frame = pd.DataFrame(granada_fc, index=[list(map(lambda x: x, granada_fc['Numero'] ))])
data_frame.plot(x= 'Jugador', y= 'Goles', kind='bar')
##Usando la libreia de Matplotlib para graficar los jugadores y los goles en una barra
plt.show()
data_frame
Información resumida de esta clase
#EstudiantesDePlatzi
Pandas maneja 2 objetos principales
Pandas series es muy similar a un array unidimensional de NumPy y posee muchas funcionalidades similares
Pandas DataFrame es muy similar a las estructuras matriciales
Estos DataFrame poseen índices, es decir, las columnas tienen su nombre y las filas también
Cuando definamos un panda series podemos nosotros asignarle el index, si no lo hacemos, panda lo hará por nosotros
Los DataFrame me permiten organizar la información en una matriz o tabla y poderla visualizar y manipular de mejor manera
No me pude resistir:
¡¡¡MESSIIIUUUUU!!!
Va mi aporte:
#Leer dataframe
dict = {
'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'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]
}
df = pd.DataFrame(dict)
#Traer la fila del jugador con la altura maxima
df[df['Altura'] == df.Altura.max()]
#Traer la fila del jugador con la altura minima
df[df['Altura'] == df.Altura.min()]
#Traer la fila del jugador con la mayor cantidad de goles
df[df['Goles'] == df.Goles.max()]
#Traer la fila del jugador con la menor cantidad de goles
df[df['Goles'] == df.Goles.min()]
RETO:
granada = {
'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]
}
granada_df = pd.DataFrame(granada)
granada_df
Reto de la clase
granada_fc_dict = {
‘Jugador’:[‘Luis Suárez’,‘Jorge Molina’, ‘Antonio Puertas’, ‘Germán Sánchez’, ‘Luis Milla’, ‘Luis 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]
}
index = [9, 23, 10, 6, 5, 1]
df_players_granada = pd.DataFrame(granada_fc_dict, index=index)
df_players_granada
granada_dict = {'Jugador':['Luis Suárez','Jorge Molina', 'Antonio Puertas', 'Germán Sánchez', 'Luis Milla', 'Luis Manuel Arantes Maximiano'],
'Posición':['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]}
numero = [9, 23, 10, 6, 5, 1]
Granada = pd.DataFrame(granada_dict,index=numero)
Adjunto mi DataFrame con los jugadores del Granada!
Reto de DataFrame Cumplido!
Filtro por número de jugador:
.
código, 👁 ojo en el archivo faltaba colocar la coma después de cada lista
player_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]
}
Series y DataFrames en Pandas
________________________________________
Ya entendiste los conceptos básicos de NumPy, ahora hay que entender cómo funciona la librería de Pandas, esta nos ayuda a hacer una mejor exploración y análisis de los datos.
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
________________________________________
[2]
0 s
import pandas as pd
________________________________________
[4]
psg_players = pd.Series(["ozil","cristiano","ronaldo","guarin","heto","mesi","puyol","james"],
index=[2,5,7,9,10,11,24,9])
#definimos nuetra lista de datos y si sabemos la posiscion de cada uno de
#ellos podemos acceder a ellos atreves del (index=)
________________________________________
[5]
1 s
psg_players
2 ozil
5 cristiano
7 ronaldo
9 guarin
10 heto
11 mesi
24 puyol
9 james
dtype: object
________________________________________
[7]
pd.Series(["ozil","cristiano","ronaldo","guarin","heto","mesi","puyol","james"],
)
#si no sabemos las posisciones de los valores, y no ponemos el index, pandas
#los posicionara por defecto
________________________________________
[10]
dict = {2:"ozil",5:"cristiano",7:"ronaldo",9:"guarin",10:"heto",11:"mesi",24:"puyol",9:"james"}
pd.Series(dict)
#y si no quiero definir mis listas con pd.series, lo puedo hacer con dicionarios
#y si le ponemos pd.serie y le agregamos el diccionerios, nos dara el mismo resultadoi
2 ozil
5 cristiano
7 ronaldo
9 james
10 heto
11 mesi
24 puyol
dtype: object
________________________________________
[13]
0 s
psg_players[0]
________________________________________
[18]
0 s
psg_players[2]
#cuando entramos donde se encuentra ubicado, nos arrojara error
# siempre debemos entra a cada posición del objecto
________________________________________
[15]
0 s
psg_players = pd.Series(["ozil","cristiano","ronaldo","guarin","heto","mesi","puyol","james"],
)
#sino quiero manejar un arreglo de tipo unidireccional
________________________________________
[17]
psg_players[0:2]
#este está basado en un arreglo de NumPy
0 ozil
1 cristiano
dtype: object
________________________________________
[36]
0 s
dict = {"jugador":["ozil","cristiano","ronaldo","guarin","heto","mesi","puyol","james"],
"Altura":[182.0,180.0,178.0,186.0,190.0,168.0,184.0,181.0],
"Goles":[233,345,233,145,217,276,189,367]
}
________________________________________
[38]
pd.DataFrame(dict,index=[2,5,7,9,10,11,24,9])
#aca como resultado me da una estructura matricial indexada por filas y columnas
# los datafrem son la estrutura principal de pandas, que puedo acceder a multiples
#valores de diferentes formas
________________________________________
[39]
pd.DataFrame(dict)
#por defecto
________________________________________
[40]
0 s
df_players = pd.DataFrame(dict)
________________________________________
[41]
df_players.columns
#me muestras las columnas
#puedo acceder a la data de players por un índices de columnas
Index(['jugador', 'Altura', 'Goles'], dtype='object')
________________________________________
[42]
df_players.index
#tambien por un índice de filas
#lo que es muy valiosos para este mundo de los datos
RangeIndex(start=0, stop=8, step=1)
________________________________________
[45]
0 s
df_players = pd.DataFrame(dict,index=[2,5,7,9,10,11,24,9])
#con pandas la estructura matricial tambien puedo acceder a todos los valores
#por columnas e indices, identificando los datos de uana manera unica en filas
________________________________________
[46]
df_players.columns
#aca puedo observar los índices, pero a nivel de columnas
Index(['jugador', 'Altura', 'Goles'], dtype='object')
________________________________________
[47]
df_players.index
#aca podemos mirar los índex a nivel de filas
Int64Index([2, 5, 7, 9, 10, 11, 24, 9], dtype='int64')
________________________________________
el objetivo principal de pandas es hacer analítica, manipulación y procesamiento de datos
________________________________________
ahora ya sabemos crear pandas series y df que son los dos objectos principales con la que se mueve la librería de pandas
d = {
"one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
"two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]),
}
df = pd.DataFrame(d)
dg = pd.DataFrame(d, index=["d", "b", "a"], columns=['a', 'b', 'c', 'd'])
df.index, dg.columns
Mi pequeno aporte, realizando un dataframe de los jugadores del granada.
dict_granada = {
'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'German Sanchez', 'Luis Milla', 'Luas Manuel Arantes Maximiano'],
'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]}
dict_granada
pd.DataFrame(dict_granada)
granada_players = pd.DataFrame(dict_granada)
granada_players
Jugador Posicion Numero Altura Goles
0 Luis Suarez Delantero 9 185.0 7
1 Jorge Molina Delantero 23 187.0 7
2 Antonio Puertas Centrocampista 10 185.0 5
3 German Sanchez Defensa 6 187.0 2
4 Luis Milla Centrocampista 5 175.0 2
5 Luas Manuel Arantes Maximiano Portero 1 190.0 0
#Reto: Jugadores del granada
dic = {
'Jugador':['Luis Suarez','Jorge Molina', 'Antonio Puertas', 'Germán Sánchez', 'Luis Milla', 'Luís Manuel Arantes Maximiano'],
'Posición':['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] }
granada_fc = pd.DataFrame(dic, index=[9, 23, 10, 6, 5, 1])
granada_fc
Solución al reto:
En mi caso en particular, decidí usar como índices los números de los jugadores, diccionario que borré de granda_fc
y agregué directamente cómo index
a la creación del DataFrame
Gatos del hogar
gatos = {
'nombre':['Lila','Molly','Sombra','Luna'],
'edad/años':[2,1,5,4],
'raza':['angora','angora','angora','criolla'],
'color':['negro/blanca','blanca/gris','negro','amarilla/blanca']
}
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.