Python: Как создать функцию Minmax, которая выполняет цикл по каждому отдельному столбцу в df?

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

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

Что я сделал:

 import pandas as pd
from sklearn import preprocessing


data = pd.DataFrame({ 'col1' : ['1', '1', '1', '1', '2', '2', '2', '3', '3'],
        'col2' : ['5', '8', '7', '12', '2', '1', '3', '15', '4'],
        'col3' : ['6', '8', '8', '10', '5', '1', '0', '6', '3'],
        'col4' : ['7', '7', '7', '0', '20', '12', '5', '5', '1']
        }, dtype='int32')

def minmax(column):
    float_array = data[column].values.astype(float).reshape(-1,1)
    min_max_scaler = preprocessing.MinMaxScaler()
    scaled_array = min_max_scaler.fit_transform(float_array)


for data.column in data.columns[1:]:
    minmax(data.column)
  

Когда я запускаю это, я не получаю никаких выходных данных. Итак, когда я изменил значение minmax(data.column) в for цикле на print(minmax(data.column)) , он показывает следующий вывод:

 for data.column in data.columns[1:]:
    print(minmax(data.column))
None
None
None
  

Может кто-нибудь, пожалуйста, объяснить, в чем ошибка, которую я здесь делаю?

Спасибо

Редактировать 1:

Я хотел бы, чтобы вывод был в таком формате, чтобы я мог передать его в другую функцию, которая выполняет OneClassSVM над ним.

Ответ №1:

Я вижу 2 проблемы — отсутствует return в функции, и в цикле используется новая переменная, например, c для перебора элементов имен столбцов:

 def minmax(column):
    float_array = data[column].values.astype(float).reshape(-1,1)
    min_max_scaler = preprocessing.MinMaxScaler()
    scaled_array = min_max_scaler.fit_transform(float_array)
    return scaled_array

for c in data.columns[1:]:
    arr = minmax(c)
    print (arr)
  

 for c in data.columns[1:]:
    arr1 = data[c].values.astype(float).reshape(-1,1)
    #array for next processing
    print (arr1)
  

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

1. Привет, @jezrael, спасибо за помощь. Один вопрос: Когда я выполняю команду print, формируется переменная с именем c типа string и размером 1. Есть ли способ, которым я могу изменить это в такой формат, чтобы я мог затем отправить его в качестве входных данных в другую функцию, которая выполнит для него OneClassSVM?

2. @Bibliophile20 — хммм, машинное обучение дается мне нелегко, но, на мой взгляд, вы можете использовать аналогичный подход, как в вашей функции — если нужен 2d массив.

3. @Bibliophile20 — Но возможно, я ошибаюсь, потому что это зависит от того, что именно вам нужно сделать.