es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transformaciones de funciones definidas por el usuario en Python Pandas DataFrame

Tengo varios DataFrames en los que estoy limpiando los datos. El siguiente código funciona de forma independiente (fuera de una función), sin embargo, tengo que aplicarlo a muchos DataFrames y quiero simplificar este proceso mediante una función definida por el usuario.
¿Puedes ayudarme a corregir lo siguiente para que pueda usarlo en todos mis dataframes?

def format_df(df):
    df.columns = df.columns.str
    df.dropna(thresh=1, axis='columns', inplace=True)
    df.dropna(thresh=80, axis=0, inplace=True)    
    df.columns = df.iloc[0]
    df = df.iloc[1:].reset_index(drop=True)
    df.columns = df.columns.str.replace(' ', '', regex=False)
    df.columns = df.columns.str.replace('($)', '', regex=False)
    df.columns = df.columns.str.replace('(Y/N)', 'Flag', regex=False)
    df.columns = df.columns.str.replace('(x)', '', regex=False)
    df.columns = df.columns.str.replace('-', '', regex=False)
    return df
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas modificaciones que deben hacerse en el código para que funcione como una función definida por el usuario que se pueda aplicar a múltiples dataframes.

    En primer lugar, la función debería recibir el nombre del dataframe como parámetro de entrada, así:

    def format_df(data):
        df = data.copy()
    

    En segundo lugar, en lugar de usar el argumento “inplace” en la función dropna de pandas, debemos devolver el dataframe después de realizar las operaciones. Por lo tanto, las siguientes líneas:

        df.dropna(thresh=1, axis='columns',inplace = True)
        df.dropna(thresh=80,axis=0,inplace = True) 
    

    deben ser reemplazadas por:

        df = df.dropna(thresh=1, axis='columns')
        df = df.dropna(thresh=80,axis=0)
    

    Por último, debemos asegurarnos de que el dataframe modificado se devuelva al final de la función incluyendo la línea:

        return df
    

    La versión final de la función se vería así:

    def format_df(data):
        df = data.copy()
        df.columns = df.columns.str
        df = df.dropna(thresh=1, axis='columns')
        df = df.dropna(thresh=80,axis=0)    
        df.columns = df.iloc[0]
        df = df.iloc[1:].reset_index(drop=True)
        df.columns = df.columns.str.replace(' ','',regex=False)
        df.columns = df.columns.str.replace('($)','',regex=False)
        df.columns = df.columns.str.replace('(Y/N)','Flag',regex=False)
        df.columns = df.columns.str.replace('(x)','',regex=False)
        df.columns = df.columns.str.replace('-','',regex=False)
        return df
    

    Ahora puedes aplicar esta función a cualquier dataframe pasándola como argumento a la función. Por ejemplo, si tienes un dataframe llamado “df1”, puedes aplicar la función de la siguiente manera:

    df1_clean = format_df(df1)
    

    Esto devolverá una versión limpia del dataframe llamada “df1_clean”.

Comments are closed.