Guía 7

Resueltos

resueltos_guia_7.py
# Datos y Creacion del Data Frame
 
import pandas as pd
print(pd.__version__) #version de pandas que se esta usando
 
peliculas = {'nombre': ['Titanic', 'Kil Bill', 'Matrix', 'El padrino', 'Avatar',
                        'Casablanca', 'El exorcista',  'Soy leyenda',
                        'El club de la pelea', 'Mujercitas'],
            'director': ['James Cameron', 'Quentin Tarantino', 'Hermanas Wachowski',
                        'Francis Ford Coppola', 'James Cameron', 'Michael Curtiz',
                        'William Friedkin', 'Francis Lawrence','David Fincher',
                        'Greta Gerwig'],
            'año': [1997, 2003, 1999, 1972, 2009, 1942, 1973, 2007, 1999, 2019],
            'género': ['romance', 'acción', 'ciencia ficción', 'drama', 'ciencia ficción', 'drama', 'terror',
                        'ciencia ficción', 'drama', 'drama'],
            'puntaje': [8.6, None, 6.9, 7.5, 9.1, 6.0, None, None, 9.4, 8.0]}
 
df = pd.DataFrame(peliculas) #crea Data Frame
 
#Algunas Funciones de Pandas
"""
print(df) #Imprime Data Frame
df.info() #da informacion sobre el Data Frame
print(df.describe()) #Algunas medidas como cual es el valor maximo, el minimo, los percentiles, etc
print(df.head(3)) #imprime 3 primeras filas del Data Frame (0;1;2)
print(df.iloc[3:5]) #imprime filas 3 y 4 del Data Frame (se cuenta desde 0 con lo cual estrictamente son la cuarta y quinta fila)
print(df.loc[3:5,["director", "año"]]) #Imprime filas 3, 4 y 5 y las columnas "director" y "año" del Data frame (se cuenta desde 0 con lo cual estrictamente son la cuarta, quinta y la sexta fila)
print(df.loc[df.index[[3, 5]], ["director", "año"]]) #Imprime filas 3 y 5 y las columnas "director" y "año" del Data frame (se cuenta desde 0 con lo cual estrictamente son la cuarta y la sexta fila)
print(df[df["puntaje"]>7.9]) #Imprime el Data Frame filtrando las filas por la condicion que se cumpla en la columna "puntajes" de que el mismo debe ser mayor a 7.9
print(df[df["puntaje"].isnull()]) #Imprime el Data Frame filtrando las filas por la condicion de que en la columna no haya datos
print(df[(df["director"] == "James Cameron") & (df["puntaje"] > 9)]) #Filtra filas segun mas de una condicion en columnas usando and
print(df[(df["director"] == "James Cameron") | (df["puntaje"] > 9)]) #Filtra filas segun mas de una condicion en columnas usando or
print(df[(df["director"] == "James Cameron") & ~(df["puntaje"] > 9)]) #Filtra filas segun mas de una condicion en columnas usando and y negacion
print(df[df["puntaje"].between(6, 7)]) #Filtra filas segun condicion en columna con cota inferior y superior
df.loc[4,"nombre"] = "Se lo que hicieron el verano pasado" #reemplaza la celda de la fila 4 columna nombre
print(df)
print(df["año"].sum()) #Suma (o si es string concatena) toda la columna año
print(df.groupby("director")["puntaje"].mean()) #crea tabla con el promedio de puntaje de cada director
df.loc[10] = ["El silencio de los inocentes", "Jonathan Demme", 1991, "policial", 8.9] #agrega una fila
print(df)
df = df.drop(10) #borra una fila, en este caso la 10
print(df)
print(df["director"].value_counts()) # hace una tabla contando las apariciones de los elementos de una columna
df=df.sort_values(by=["género", "puntaje"], ascending=[False, True]) #ordena la tabla primero por genero (descendiendo) y luego por puntaje(ascendiendo)
print(df)
df["género"]=df["género"].map({"terror":"genero desagradable", "drama":"no me gusta"}) #aplica la funcion map a la columna genero reemplazando las coincidencias y borrando las no coincidencias
print(df)
df["género"]=df["género"].replace("no me gusta","ahora si me gusta") #reemplaza ciertos elementos de una columna por otro que indiquemos
print(df)
"""
 
# 1) Mostrar la información del DataFrame con el método info(), ¿Cómo se llaman y qué tipo de dato tiene cada columna? ¿Cuántos elementos nulos hay en cada columna? Interpretar qué información se guarda en esta tabla y para qué puede servir.
df.info()
print()
"""Las columnas son nombre (object), director (object), año (int64), género (object) y puntaje (float64).
En la columna puntaje hay 3 nulos. En el resto no hay nulos.
Se guarda la cantidad de columnas, el nombre de las columnas, la cantidad de filas, la cantidad de datos no nulos en cada columna y los tipos de objetos que hay en cada columna.
"""
 
# 2) Mostrar sólo los nombres de las primeras 3 películas del DataFrame.
 
print(df.loc[0:2,["nombre"]])
print()
 
"""Alternativamente"""
 
print(df.head(3)["nombre"])
print()
 
# 3) Mostrar sólo el director y el género de todas las películas.
 
print(df.loc[:,["director","género"]])
print()
 
# 4) Mostrar las películas que sean de drama.
 
print(df[df["género"] == "drama"])
print()
 
# 5) ¿Qué cantidad de películas hay de cada género?
 
print(df["género"].value_counts())
print()
 
# 6) Mostrar las películas que tengan puntaje entre 6 y 8 y cuyo año de estreno sea anterior a los 2000.
 
print(df[(df["puntaje"].between(6, 8)) & (df["año"] < 2000)])
print()
 
# 7) Mostrar las películas que no hayan sido puntuadas (que el puntaje tenga un valor nulo).
 
print(df[df["puntaje"].isnull()])
print()
 
# 8) Calcular el promedio del puntaje de todas las películas.
 
print(df["puntaje"].mean())
print()
 
# 9) Ordenar las películas en orden alfabético descendente.
 
print(df.sort_values(by=["nombre"], ascending=[False]))
print()
 
# 10) Mostrar las 3 películas más antiguas.
 
df_ordenada_por_año=df.sort_values(by=["año"], ascending=[True])
print(df_ordenada_por_año.head(3))
print()
 
# 11) Mostrar sólo el nombre y el año de las 3 películas más nuevas.
 
df_ordenada_por_año_mas_nuevo=df.sort_values(by=["año"], ascending=[False])
print(df_ordenada_por_año_mas_nuevo.iloc[:3][["nombre", "año"]])
print()
 
# 12) Agregar una columna que indique si la película fue vista, o no. Una película fue vista cuando tiene puntaje no nulo
 
df["fue_vista"] = df["puntaje"].notnull()
print(df)