De paneles de datos al DataFrame

3/28
Recursos

Aportes 68

Preguntas 13

Ordenar por:

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

dict_data = {
    'edad': [10,9,13,14,12,11,12],
    'cm': [115,110,130,155,125,120,125],
    'pais':['co','mx','co','mx','mx','ch','ch'],
    'genero':['M','F','F','M','M','M','F'],
    'Q1':[5,10,8,np.nan,7,8,3],
    'Q2':[7,9,9,8,8,8,9]
}

Aqu铆 dejo el index,para que no vayan a buscarlo:

df = pd.DataFrame(dict_data, index = ['ana','benito','camilo','daniel','erika','fabian','gabriela'])

La funci贸n query es mucho mejor que los el otro tipo de filtros porque aumenta la legibilidad del c贸digo. Ejemplo:
.
df.query( 'edad >= 12 and pais == "mx" ')
y
df[(df['edad'] >= 12) & (df['pais'] == 'mx')]
.
Muestran los mismos resultados pero el primero es mucho m谩s legible que el segundo.

algunas funciones muy 煤tiles cuando arrancas a analizar un set de datos luego de tenerlo como un dataframe(df) son:

  • df.info() te devuelve un resumen con la estructura de las variables y el tipo de datos que contienen.
  • df.describe() te devuelve un summary() de tu set de datos. Si tienes variables numericas te devolvera: minimo. maximo, media,std,鈥tc de las columnas numericas.

tambien para contar cuantos valores iguales hay en una columna :

df['Edad'].value_counts()

Para saber los valores 煤nicos en una columna :

df['Edad'].unique()

Les dejo un ejemplo de uso del .query
Esta seria la forma normal de hacer consultas

dt[(dt['edad']>=12) & (dt['pais']=='mx')]

Con .query la lectura y escritura es mas simple

df.query('edad>12 & pais=="mx" ')

Cuando filtramos en pandas, las condiciones no son como en python que usamos:

  • and
  • or

En pandas son reemplazados por & y por |, de esta manera:

  • and = &
  • or = |

Asi las usamos:

df[(df['edad'] >= 12) & (df['pais'] == 'mx')] 

y para filtrar con 鈥渙r鈥

df[(df['pais'] == 'co') | (df['pais'] == 'mx')]

Cada condicion por separado debe ir encerrada en parentesis

df.loc Para ubicar por el nombre de las columnas e indices

df.iloc Para ubicar por n煤mero de columna y fila

pd.version
!pip install --upgrade pandas
pd.Series(<dictionary>)
pd.DataFrame(<dictionary>)
pd.DataFrame(<dictionary>, index=<list_indexes>)
df.describe()
df.columns
df.index
df.values
df[<column>]
df[<list_columns>]
Con loc obtenemos un subconjunto de datos por 铆ndices y columnas, con iloc es por posici贸n. : indica que se requiere la informaci贸n completa.
df.loc[<list_indexes>,<list_columns>]
df.iloc[<list_index_positions>,<list_column_positions>]

Ejemplos de filtrar un DataFrame.
df[(df[鈥榚dad鈥橾 >= 12) & (df[鈥榩ais鈥橾 == 鈥榤x鈥)]
df.query(鈥榚dad >= 12 and pais == 鈥渕x鈥濃)

dict_data = {'CH':[100,800,200], 'CO':[100,200,300], 'MX':[300,500,400]}```

hace que se parezca mucho a matlab

Uffff, de verdad que est谩 muy potente este curso.
Ya tengo ganas de iniciar un proyecto 馃槃

Les comparto los apuntes que hice de esta clase en Github y un notebook que hice explicando paso a paso todo lo visto en clase. Espero que les sea de utilidad:

https://github.com/bl00p1ng/Curso-analisis-de-datos-con-Pandas-y-Python#clase-4-de-paneles-de-datos-al-dataframe

Nota: El enlace al Notebook esta en los apuntes en Github

No me queda muy claro鈥
驴Cu谩l es la diferencia entre Numpy y Pandas?

De un pan-da鈥檚 a Dataframe

  • pd.Dataframe(dicionario) genera un Dataframe a partir de un diccionario
  • pd.Dataframe(diccionario, index= [index1, index2, etc]) define 铆ndices en el DataFrame
  • df.index muestra los 铆ndex como una lista
  • df.values muestra todos los valores

Loc & iLoc

  • df[鈥榗olumna1鈥, 鈥榗olumna2鈥, etc] devuelve una o m谩s columnas del df
  • df.loc[ [鈥榠ndex1鈥, 鈥榠ndex2鈥橾, [鈥榗olumna1鈥, 鈥榗olumna2鈥橾 ] devuelve las filas correspondientes a los 铆ndices selccionados y las columnas seleccionadas
  • df.iloc[posicion de fila, posici贸n de columna] trae los datos en esas filas/columnas, tambi茅n se pueden utilizar listas como con la funci贸n .loc
  • df.loc[:,:] los dos puntos significan todas las filas o todas las columnas

Otras formas de SubDataframes

  • df[ (df[鈥榗olmuna鈥橾 = condici贸n) & (condici贸n2), etc. ] devuelve la columna en todas las filas donde se cumpla esa o esas condiciones
  • df.query(鈥 鈥榗olumna鈥 = condici贸n ') devuelve el dataframe en todas las filas donde se cumpla la condici贸n (transforma el texto de la query en la condici贸n)

La lista de nombres,

df = pd.DataFrame(dict_data, index = ['ana','benito','camilo','daniel','erika','fabian','gabriela'])
df```

Siento que en cada clase se avanza a pasos de gigante.

al fin pude ver como se relacionan los diccionarios y listas con tablas!!! gracias por esta clase tan genial!!

Ahora comprendo que deb铆a ver este curso antes del de estad铆stica descriptiva, pero ha significado un gran repaso y sobre todo mayor entendimiento de la l贸gica del c贸digo.

Es el mejor curso de la ruta de Data Science para cuando versi贸n 2?

para traer rangos:

df.iloc[2:4, [1,3]]

o

df.loc['benito':'daniel', ['edad', 'cm', 'Q1']]

Si se desea convertir los indices, en una columna, se debe hacer con: df.reset_index(), el nombre de la columna aparecer谩 como: 鈥業ndex鈥

si no te crea directamente el excel prueba esto:

!pip install openpyxl

recomiendo mucho usar deepnote para apuntes (para mi es un poco m谩s organizado que google collab)

Me encant贸, muchas gracias

Por qu茅 se tiene que usar el operador & y no se puede el AND ?

Muchas gracias, se me ha complicado tanto aprenderle al profe, pero con esta pr谩ctica, me queda todo m谩s claro. :3

Excelente clase

	podemos definir los indices a traves del parametro index
	df.index obtener indices
	df.columns obtener columnas
	df.values obtener valores
	encerra en doble parentesis para leer los valores de varias colummnas df[['ana']]
	df.loc nos permite localizar
	mostrar datos especificos df.loc['ana', ['x1', 'x2', 'x3']]
	df.iloc nos permite seleccionar datos a traves de su posicion
	filtrado especifico df[(df['edad'] >= 12) & (df['pais'] == 'mx')]
	filtrado con querys df.query('edad聽>聽12')

O sea b谩sicamente

El Series funciona con UN 铆ndice. Lo mero mismo que un diccionario pero m谩s bonito.

El DataFrame tiene UN 铆ndice y UNA columna, se puede acceder a ellos a trav茅s de coordenadas.

Suponiendo que el curso se promedia con esos 2 ex谩menes estos son los alumnos que pasar铆an!
(que el promedio de sus calificaciones sea mayor o igual a 7)

df[(df['Q2'] + df['Q1'])/2 >= 7]

Wow, siento que he aprendido mucho en esta clase, tengo que procesarlo.

Un ejemplo de como escribirlo en VS code

as铆 se ver铆a en consola:

a continuaci贸n algunos apuntes

  • import pandas as pd: para traer la librer铆a de pandas
  • import numpy as np: para traer la librer铆a de numpy
  • df= pd.DataFrame(dict_data): convertir un diccionario en dataframe.
  • df= pd.DataFrame(dict_data, index= [鈥榓na鈥,鈥榖enito鈥,鈥榗amilo鈥,鈥榙aniel鈥,鈥榚rika鈥,鈥榝abian鈥,鈥榞abriela鈥橾): para definir los 铆ndices.
  • df.index: para ver los 铆ndices de la tabla.
  • df.columns: para ver las columnas
  • df.values: para ver los datos
  • df[鈥渆dad鈥漖: para ver solo una columna
  • df[[鈥渃olumna 鈥, columna2鈥, 鈥渃olumnan+鈥漖]: para ver varias columnas.
  • df.loc[鈥渁na鈥漑鈥渄atos que necesite鈥, 鈥渕as datos鈥漖]: para filtar a trav茅s de sus 铆ndices y columnas los datos requeridos.
  • df.iloc[2,1]: me permite traer los datos seg煤n su posici贸n, contando desde 0.

En caso de que alguien haya intentado aplicar m煤ltiples condiciones incluyendo una sobre la variable categ贸rica, aqu铆 un ejemplo:

df.query("(edad >= 12) & (Q1>2) & (pais=='co')") 

Me saque las ganas de hacer este estudio:

df[(df['Q1'] >= 7.0) & (df['Q2'] >= 7.0)]

Entro en crisis cada que estoy tratando de seguir el c贸digo y aparecen un poco de l铆neas de la nada. 馃槮

A continuaci贸n expongo una noci贸n b谩sica de la creaci贸n de un Data Frame

import pandas as pd

numbers = {"even":list(range(0,200,2)),"odd":list(range(1,200,2))}

# Creaci贸n de un dataFrame en pandas
df=pd.DataFrame(numbers)

Quede encantado con esta clase. Sobre todo con:

df[(df['edad']>= 12) & (df['pais']=='mx')]

Este tipo de consultas me encantan

Que genial esta clase. Se aprende mucho con este docente. Los conceptos vertidos aqu铆 me hicieron acordar mucho a SQL y a Excel.

Les dejo un resumen de la clase, en lugar de usar los mismos ejemplos he usado los mios propios.
Pueden tomarlos com si fueran ejercicios para hacer.

Muy buena clase.

Alguien se dio cuenta que el genero de las personas que aparecen en el indice est谩 mal? Jeje

hab铆a estado buscando como hacer esto desde hace muuucho, donde estaba esta curso antes :鈥)

Si buenas, aqu铆 aprendiendo pandas para usar en Power Bi

Un data frame es una estructura de datos rectangular, que contiene las variables en las columnas y las observaciones en las filas. Piensa en un data frame como una hoja de Excel

dict_data = {'CH':[100, 800, 200] , 'CO':[100, 200, 300], 'MX':[300, 500,400]}
dict_data

La funci贸n df.describe() nos muestra informaci贸n estad铆stica de nuestras atributos num茅ricos, como ser la cantidad, el promedio, la desviaci贸n est谩ndar, el m铆nimo, el m谩ximo y los percentiles 25%, 50% y 75%.

Indices

.
Es importante mencionar que un DataFrame puede tener uno o m谩s 铆ndices.
.

  • El tener multiples 铆ndices hace m谩s complicado el procesar nuestro DataFrame
  • El beneficio de los multiples 铆ndices que es m谩s f谩cil entender nuestros datos
    .
  • df.set_index('columna') -> para convertir nuestra(s) columna(s) en 铆ndice(s)

.
Ejemplo

import pandas as pd
data = [['Mark','Test_1','Maths',75], ['Mark','Test_2','Science',85],
        ['Juli','Test_1','Physics',65],['Juli','Test_2','Maths',70],
        ['Kevin','Test_1','Science',80],['Kevin','Test_2','History',90]]
df = pd.DataFrame(data, columns=['Name','Test','Subject','Score'])
df

	Name 	Test 	Subject 	Score

0 	Mark 	Test_1 	Maths 		75
1 	Mark 	Test_2 	Science 	85
2 	Juli 	Test_1 	Physics 	65
3 	Juli 	Test_2 	Maths 		70
4 	Kevin 	Test_1 	Science 	80
5 	Kevin 	Test_2 	History 	90
df1.set_index(['Name','Test'])

 		Subject 		Score
Name 	Test 
		
Mark 	Test_1 	Maths 		75
	Test_2 	Science 	85

Juli 	Test_1 	Physics 	65
	Test_2 	Maths 		70

Kevin 	Test_1 	Science 	80
	Test_2 	History 	90

驴Qu茅 es un Dataframe?

Es un arreglo bidimensional donde cada columna contiene una categor铆a de datos.

Muy interesante, las aplicaciones son inmensas.

Un **DataFrame ** es una estructura bidimensional en la que las columnas corresponden a varias que categor铆as de datos que pueden ser de tipo texto, num茅rico, l贸gico, etc.

馃槏

Para cambiar el tipo de dato de las columnas 鈥楺1鈥 y 鈥楺2鈥:

df = df.astype({"Q1": float, "Q2": float})

tambi茅n se pueden usar como operadores l贸gicos: 鈥榓nd鈥,鈥榦r鈥,'not
tambi茅n;
& and, | or, ^ xor, ~ not, << Desp izquierda, >> Desp derecha

Que buen curso

command 鈥渋nstall鈥搖pgrade鈥 - maybe you meant 鈥渋nstall鈥

alguien sabe por que sale eso?

excelente

loc me permite seleccionar datos a traves de sus indices y columnas y iloc me lo permite a traves de su posicion dentro del dataframe.

馃槍 Me quedo con el .query 馃槄. El otro m茅todo de df[] lo vi enredado.

Buen curso

Que buen curso

antes en internet trate de entender que son loc y iloc y no fue hasta esta clase que entendi , platzi me encanta cuando explica las cosas tan bien

Que buen profe

muy practico

Como recomendaci贸n. Para el caso de saber el contenido de una columna, con el ejemplo que dice el profesor df['edad'] es mejor usar el dot notation que es lo mismo pero en vez de corchetes se usa df.edad el resultado es m谩s limpio.

Informaci贸n sacada de la documentaci贸n oficial de pandas

interesante