#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 — Но возможно, я ошибаюсь, потому что это зависит от того, что именно вам нужно сделать.