...
Saltar al contenido

Trucos interesantes para Pandas (Python)

    Para poder entender bien lo que se quiere decir en los resúmenes hay que tener unas pautas:

    df es el DataFrame que se esté tratando.

    Pandas puede llamar archivos que se encuentren en red si conocemos la ruta, es decir, podriamos llamar una ruta que fuera: www._______.com/ejemplo.csv con un read_csv.

    Se pueden leer archivos con distinto juegos de caracteres con el parámetro encoding.

    Cuando se carga un dataframe es buena costumbre usar df.info() para ver de un vistazo con que estamos trabajando.

    Para tener una visual rápida del Dataframe se usa df.describe()

     

    Reordenar un DataFrame

    #Columna es una cadena con el nombre de las columnas del DataFrame con el orden que le queramos dar
    df = df [[columnas]]
    

    Cambiar los índices de un DataFrame

    df.index = df['id']
    #Utilizamos id porque en nuestro caso era la columna a hacer de índice. 

    Con esto no se elimina la columna que estaba haciendo de índice, sino que saldrán dos columnas con los mismos valores. Para quitarla:

    df.drop(['id'], axis=1, inplace=True)
    #Con axis=1 se le dice que es una columna lo que tiene que quitar
    #Con inplace=True reemplaza la variable df

    Quitar elementos de una lista

    list.remove('elemento')

    Filtrar las columnas de un DataFrame

    variable=list(df.columns)
    variable.remove('Columna a quitar')
    df = df[variable]

    También podemos filtrar con .loc para acceder a los valores usando los nombres. Además, si anteriormente cambiamos la columna que hacía de índice podemos llamarlo sin utilizar las comillas (»), por ejemplo una id.

    df.loc[valor del registro]

    También podemos tener un valor concreto de fila/columna:

    df.loc[234, 'Precio']

    Esto último devolvería el precio para el registro con el índice (en nuestro caso el id) 234.

    Para que nos devuelva más de una fila tenemos que meter las que queramos dentro de una lista antes de pasarla al .loc.

    Cuando los índices que tenemos son números (por defecto) podemos recorrer con .loc usando un slicing:

    df.loc[[:234], 'Precio']
     #Devuelve desde la primera fila hasta las 234

    Filtrar los datos de un DataFrame con .iloc

    .loc permite acceder a los datos utilizando las posiciones de los datos. Lo usa encontrando los datos por posición en la matriz que forma el DataFrame.

    df.iloc[0,0]   #Devuelve la fila 0, columna 0
    df.iloc[1,0]   #Devuelve la fila 1, columna 0

    Para obtener más de un valor, al igual que en el caso anterior, podemos utilizar slicing:

    df.iloc[:20, :4]  #Nos devuelve de la fila 0 a la 20 y la columna 0 a la 4

    Otras funciones interesantes

    • df.mean() → Devuelve todas las medias de las columnas del DataFrame.
    • df.std() → Devuelve la desviación estándar de las columnas del DataFrame.
    • df.median() → Devulve la mediana (posición central del conjunto de datos en un conjunto de datos ordenados) del Dataframe.
    • df[‘id’].value_counts() → Cuenta cuantos hay de cada valor especifico de la columna.
    • df.sort_values(‘id’, ascending=False, inplace=True) →Ordena los valores en la función de la columna dada.
    • df.isna().sum() → da los valores NA que tenemos en cada una de las columnas.
    • astype(str) permite convertir los tipos de los datos de una serie.

    Función .map

    map permite aplicar una función sobre una lista .

    def funcion(n):
       return len(n)
    x = map(funcion, ['hoja', 'manzana', 'arbol'])

    Para utilizarlo con Pandas tenemos que tener en cuenta que no se puede utilizar en DataFrames, sólo en series.

    df['columna']=df['columna1'].map({0:"mal", 1:"bien"})

    Para poder aplicarlo a un DataFrame tenemos que usar la función applymap:

    df[['nombre','sexo']].applymap(funcion)

    Trabajar con fechas

    Para trabajar con las fechas se utiliza el set de datetime

    import datetime
    import pandas as ps
    
    #Para conseguir la fecha y hora actual
    datetime.datetime.now() 

    Todos los métodos del set de datetime aquí.

    También podemos operar entre fechas con .timedelta

    #Para sumar 10 días a la fecha que queramos
    fecha.date() + datetime.timedelta(days=10)

    Para poner una fecha en el formato que queramos:

    pd.datetime("20221205", format="%Y%d%m")
    #la parte de la fecha corresponde a AAAAmmdd

    Muestreo de Dataframes

    Cuando trabajamos con Dataframes con mucho volumen de datos, se puede usar el método sample para obtener una muestra representativa:

    #Para obtener una muestra de 5000 líneas
    df.sample(5000) 

    Con esto logramos no saturar el programa y hacer que vaya mucho más rápido.

    Gruop by

    group by vale para agrupar los elementos según una columna. 

    #Agrupa según los elementos de la columna columna.
    df.groupby("columna")
    
    df.groupby("columna").agg({"columna":"sum"}) #devuelve la suma de las columnas. Podemos usar "unique" para que agrupe por unica.
    
    df.plot(x="columna").groupby(["columna1", "columna2"]) #Para agrupar por más de una columna.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *