Изменение фрейма данных pandas из функции

#python #pandas #function #dataframe

#python #pandas #функция #фрейм данных

Вопрос:

Я снова и снова пытаюсь изменить несколько фреймов данных с помощью одних и тех же операций. Я хотел бы поместить все изменения в функцию и просто вызвать функцию с именем фрейма данных и выполнить все преобразования.

Это код и все преобразования, которые я пытаюсь применить сейчас. Когда я запускаю его, ничего не происходит, и фрейм данных остается необработанным.

 #create a preprocessing formula so the process can be applied to any dataset (traning and validation and competition)
def preprocessing(df):
    #inspect dataframe
    df.head()

    #check data types in dataframe
    np.unique(df.dtypes).tolist()

    #inspect shape before removing duplicates
    df.shape

    #drop duplicates
    df = df.drop_duplicates()

    #inspect shape again to see change
    df.shape

    #calculate rows that have a mean of 100 to remove them later
    mean100_rows = [i for i in range(len(df)) if df.iloc[i,0:520].values.mean() == 100 ]

    #calculate columns that have a mean of 100 to remove them later
    mean100_cols = [i for i in np.arange(0,520,1) if df.iloc[:,i].values.mean() == 100 ]

    #calculate columns labels that have a mean of 100 to remove them later
    col_labels = [df.columns[i] for i in mean100_cols]

    #delete rows with mean 100
    df.drop(index = mean100_rows, axis=0, inplace=True)

    #delete columns with mean 100
    df.drop(columns=col_labels, axis=1, inplace=True)

    #export columns that have been removed
    pd.Series(col_labels).to_csv('remove_cols.csv')

    #head
    df.head()

    #check size again
    df.shape
  

Комментарии:

1. В конце return df , затем сделайте df = preprocessing(df) . Фреймы данных предназначены mutable для того, чтобы вы могли изменять их внутри функции, ничего не возвращая. Однако я не рекомендую это, и многие операции pandas возвращают новые объекты, так что это приведет к сбою.

2. @ALollz Большое вам спасибо, это творит чудеса!

3. Вам также нужно будет добавить print() вокруг строк like df.shape , иначе вы не увидите результат. Если вы не печатаете эти строки, они ничего не делают и могут быть удалены.

Ответ №1:

В Python объекты передаются функциям по ссылке.

Когда выполняется следующая строка

 df = df.drop_duplicates()
  

Вы в основном назначаете новую ссылку на параметр функции, но объект вне функции не изменяется.

Я бы предложил изменить функцию, чтобы она возвращала объект df, а затем присваивала его возвращаемое значение объекту df вне функции.