No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Múltiples índices

13/28
Recursos

Aportes 58

Preguntas 26

Ordenar por:

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

para hacer los ajustes al dataset para organizar el df como la clase, al leerlo utiliza el parametro ‘skiprows=4’, porque necesitas saltar las 4 primeras filas del dataset debido a que son filas en blanco, nombre del datasearch y del dataset, lo cual sino lo utilizas pandas te arroja un error al intentar parsearlo porque supone que desde la fila 1 esta compuesto el dataset.

df_pob = pd.read_csv('poblacion.csv', skiprows=4)
df_pob

Para que el Dataset se vea como con el profesor, se puede ejecutar lo siguiente:

df = df.drop(columns=[‘Country Code’,‘Indicator Name’,‘Indicator Code’,‘2019’])

df = pd.melt(df, id_vars=[“Country Name”],
var_name=“year”, value_name=“pob”)

df

para organizar el dataset como la clase:

  1. descarga el dataset y guardalo en drive
  2. crea una copia y cambiale el nombre a ‘poblacion.csv’
  3. monta el drive a google colab y lee el dataset, utilizo skiprows para saltar las 4 primeras filas que no son del dataset, sino obtendrias un error
df_pob = pd.read_csv('poblacion.csv', skiprows=4)
df_pob
  1. obtener los nombres de las columnas para solo copiar y pegar al eliminarlas debido a que son bastantes, el ejercicio se hizo con los años 2015 al 2018, yo incluire 2019
list(df_pob)
  1. Elimino las columnas que no se van a utilizar
df_pob = df_pob.drop(columns=['Country Code',
 'Indicator Name',
 'Indicator Code',
 '1960',
 '1961',
 '1962',
 '1963',
 '1964',
 '1965',
 '1966',
 '1967',
 '1968',
 '1969',
 '1970',
 '1971',
 '1972',
 '1973',
 '1974',
 '1975',
 '1976',
 '1977',
 '1978',
 '1979',
 '1980',
 '1981',
 '1982',
 '1983',
 '1984',
 '1985',
 '1986',
 '1987',
 '1988',
 '1989',
 '1990',
 '1991',
 '1992',
 '1993',
 '1994',
 '1995',
 '1996',
 '1997',
 '1998',
 '1999',
 '2000',
 '2001',
 '2002',
 '2003',
 '2004',
 '2005',
 '2006',
 '2007',
 '2008',
 '2009',
 '2010',
 '2011',
 '2012',
 '2013',
 '2014', 'Unnamed: 64'])
df_pob
  1. Pivoteo las filas para convertirlas en columnas y ordeno la data primero por ‘year’ y luego por ‘Country’, y ya queda para trabajar con el mismo dataset de la clase
df = pd.melt(df_pob, id_vars=['Country Name'], var_name='year', value_name='pob')
df = df.sort_values(by=['year','Country Name'])
df```




El profe compartió su carpeta db en donde esta el data frame de población tal cual como lo usó en el ejemplo. Carpeta db de Profe

Podemos hacer filtros sobre valores también

df.le devuelve un filtro (True, False) si en esa columna es menor a un valor (less) coloca True.

Y podemos hacer varios varios filtros operando las máscaras (o filtros), en este caso con *, lo intente con and y no me dejo.

Así quedarian varios filtros y el filtro total.

idx_filtro_country = df_pob['Country'].isin(['Aruba','Colombia','Austria','Andorra'])
idx_filtro_pop = df_pob['pop'].le(1000000)
idx_filtro_year = df_pob['year'].isin(['2015','2016'])
idx_filtro_total = idx_filtro_country*idx_filtro_pop*idx_filtro_year
idx_filtro_total

En las nuevas versiones de pandas, la organización de los índices se puede hacer de manera más fácil y manteniendo el índice incial con:

df.groupby(['Country', 'year'])

Esta fue una gran clase, el tema de los indices es muy util

¿Qué vamos a aprender en esta clase?

Vamos a aprender a trabajar un dataframe con múltiples indices. Un indice es una un dato único que nos permite identificar un archivo con una especie de condenas.

Cosas que averigué tratando de hacer esta clase

La forma de cambiar valores a tipo categórico:

  • hay 2 formas de convertir a categoria con .astype('category') y con pandas pd.Categorical
  • si la variable es numéricay la convertimos directamente a categoría al trabajar con ella se debe seguir tratando como numérica (sin comillas)
  • si es la convertimos a tipo texto y luego a categórico, se debe tratar como texto (con comillas)

Creo que el archivo descargado cambió bastante para el 2021, la mejor forma que encontré para ajustar el archivo fué la siguiente

# omitir primeras 4 lineas del archivo
# tomar solo las columnas de interés
df = pd.read_csv('files/poblacion.csv', 
    skiprows=4, 
    usecols=['Country Name', '2015', '2016', '2017', '2018'])

# reshape dataframe from wide to long form
df = df.melt(id_vars=['Country Name'], 
    var_name='year', 
    value_name='pop')

df.rename(columns={'Country Name':'country'}, inplace=True)

De igual manera en los recursos de la clase se incluye el .csv final. Pero yo lo hice a mano para aprender cosas en el camino.

Importante recordas que los índices son como la dirección de un registro

**Unstack **es un excelente metodo, al trabajar con bases de datos muchas veces necesito pivotear las filas y convertirlas en columnas en mi caso manejo mysql y para esto hay que hacer muchas marañas como decimos en colombia y aunque sql server y otras gestores de bases de datos tiene el pivot, es bueno ver en este curso que el data frame hace lo mismo con la función Unstack. Gracias por la enseñanza

Brillante clase. Primero la vi completa y luego me dispuse a realizar los pasos, tomando apuntes. Me tomó casi 3 hours esta clase. Hehehe. Next

En la función xs será deprecada la funcionalidad de pasar los keys como lista, se debe hacer en forma de tupla para futuras versiones

df_sample.xs(('Aruba','2018'))

Para que el dataframe quede igual que en la clase se debe hacer los siguiente:

#Necesitamos hacer un melt de los datos ya que queremos un formato tipo: Pais, Año, Población
#Los años seran acotados de 2015 a 2018

df_modify = df.melt(id_vars=['Country Name'], value_vars=['2015','2016','2017','2018'],var_name='Year', value_name='Population')
df_modify

Yo revisando los archivos del Data Bank y no encontrándome con lo mismo que en profesor y preocupándome 🤡🤡🤡

Esta clase estuvo heavy

cuando dice indice a q se refiere? (son las columnas no numericas?)
cuandio dice nivel a q se refiere? (la granularidad??) o solo a las columnas de izquierda a derecha?

Capaz que cuando descarguen el dataframe no puedan leerlo porque las primeras 4 filas no tienen datos, son titulos.
Usen esta linea:


df_pob = pd.read_csv('poblacion.csv', skiprows=4)

Se utiliza skiprows para saltarse las filas que no aportan valor alguno para analizar el dataframe.

Funciones matemáticas para DataFrames con múltiples índices

Unstack : Convertir índices en columnas

Unstack : Convertir índices en columnas

ta potente la clase, les recomiendo descansar y tomar otros cursos a medida que avanzan en este, porque es muy facil agobiarse.

Entendido y puesto en practica.

Yo antes usaba groupby y pivot table para agrupar datos a ese nivel. Esto le da un cambio radical a mi manera de programar ❤️.

Un índice es un artificio que en Pandas nos permite, de alguna forma encontrar la ubicación de un archivo, es decir, nos da las coordenadas, es como la dirección donde está habitando el dato, tanto en el eje de las filas, en este caso el índice, y las columnas, valga la redundancia, ambos son índices para Pandas. La gran ventaja de esto, es que al estructurar los datos, permite aplicar funciones matemáticas en varios niveles.

Este curso está excelente, muchas funciones
algún tip para recordarlas ?

No usen información del INEGI si son de México, está bastante revuelto y algunos archivos dan bastantes errores 😦

Selección de multiples indices:

  • con el método xs()
  • con la propiedad loc.
df_sample.loc['Colombia','2018'] 
-->: pop   49,648,685.00

df_sample.xs(['Colombia','2018']) 
-->: pop   49,648,685.00

Se puede hacer con un método y tambien con la propiedad loc.

NOTA: pandas==1.3.5

Para que leer el dataset desde excel=

df = pd.read_excel("/home/reveur/bandas/API_SP.POP.TOTL_DS2_en_excel_v2_3628630.xls", header=[0,1,3])
df

Muy bueno que un curso se vean muchos temas lo que me preocupa es como en mi futuro laboral/profesional voy a recordad todo esto 😒

Para el año 2022 hay cosas que ya no esta recomendada usar como por ejemplo:

df_countries.sum(level='year')

Se recomienda usar

df_countries.groupby(level='year').sum()

O sea, mínimo di que “formato” le diste al рutо csv porque descargándolo directamente de esa página no jala, da error, digo, MÍNIMO

a los estudiantes nuevos cuando se descarga la el archivo lo actualizaron y ya no aparece tal cual lo hace el profe debes darle click a el link que deja el profe para poder descargarlo como el lo tiene

Para que se muestre como al profe en DeepNote
Usa Raw Output

Este es el script de esta clase,
espero que sea de ayuda

Con “loc” se pueden obtener dos índices de una manera más fácil

df_sample.loc['Colombia','2018']

IndexSlice

Hola, solo para recordarles que hubo una actualización en la base, y antes de hacer lo que dice Elias, deben editar el header, funciona con esta linea:
df_pob = pd.read_csv('poblacion.csv', header=2)

Ahora entiendo la utilidad de los indices, esta es una muy buena clase.

no entiendo como por que tiene que venir la comunidad a decirnos como organizar el archivo para que se vea como el de la clase, eso es respondabilidad del instructor

A fecha de hoy(abril 9), no se puede descargar ese CSV, hay un error o problema que ellos deben resolver. Mira sin hacerlo por tu cuenta o vé al siguiente video.

Basandome en otra respuesta, lo que yo hice para arreglar el dataset que se encuentra en la pagina del banco mundial fue usar esto

df = pd.melt(df_pob, id_vars=['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code'], var_name='Year', value_name='Poblacion')
df = df.sort_values(by=['Year','Country Name'])
df

el parámetro** id_vars** es para seleccionar las columnas que no se mueven, el var_name para nombrar nuestra nueva columna de año y finalmente se crea una columna nueva con el valor de cada año el cual es la poblacion y ese lo establecí con value_name = ‘Poblacion’. En la siguiente linea se ordena por año y por El nombre del país y ya

Hasta cierto punto todo bien y despues me sale este error, VEO QUE MUCHOS ESTAMOS CON EL ERROR y no se ha solucionado… he buscado en stackoverflow, y me he liado más con los códigos, que tuve que borrar mi antiguo notebook y empezar desde cero…

df_pob[‘year’] = pd.Categorical(df_pob[‘year’].apply(str))

KeyError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3360 try:
-> 3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:

4 frames
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: ‘year’

The above exception was the direct cause of the following exception:

KeyError Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
-> 3363 raise KeyError(key) from err
3364
3365 if is_scalar(key) and isna(key) and not self.hasnans:

KeyError: ‘year’

Probablemente este mal pero la clase se sintió como si estuviera utilizando las tablas dinámicas de Excel, solo que ahora en lugar de ver las cosas con una interfaz grafica, se hace con Python y sus librerías.

Os recuerdo practicar, es bastante importante. Estamos viendo muchos, muchos conceptos pero lo más probable es que se nos olviden.
.
Recomiendo que vean estos tutoriales de el compañero @antony_manotoa
.
vayan practicando poco a poco, este curso es un pilar bastante fundamental para lo que se viene en el futuro

👾

La base de datos que me aparece en la página no se parece en nada a la que usa el profesor. Alguien podría pasarme la base de datos?

Si tan solo hubiera visto esta clase cuando estaba en proceso de tesis, hubiera sido un gran alivio 😦

Si requieren cambiar la casilla pop a valor númerico

df_pob['pob'] = pd.to_numeric(df_pob['pob'])

este curso se pone mejor con cada clase

get_index_values Saber cuales son los niveles de los índeces (por si tampoco lo entendías)

Seleccionar datos de un DataFrame con múltiples índices

que excelente herramienta, y buena explicación

¿A alguien mas le aparece una carpeta con nombre sample data cuando listan los items de content en Google Drive?. Dentro trae unos data frames para jugar con Colab, pero no se si vienen por default en Google o yo los meti alguna vez.

No les sucede que le salen errores a cada rato? Frustrante a veces pero viendo los detalles y corrigiéndolos se avance, a seguir aprendiendo compañeros!

Dejo el enlace de la carpeta db del profe, alli vienen los data frames tal cual como los utilizó. Y desde alli los pueden descargar Carpeta db prof

Excelente, muchas gracias