Karışık tip sütunlara sahip bir panda veri çerçevem var ve sklearn'ın min_max_scaler'ını bazı sütunlara uygulamak istiyorum. İdeal olarak, bu dönüşümleri yerinde yapmak isterdim, ancak bunu yapmanın bir yolunu henüz bulamadım. Çalışan şu kodu yazdım:
import pandas as pd
import numpy as np
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler()
dfTest = pd.DataFrame({'A':[14.00,90.20,90.95,96.27,91.21],'B':[103.02,107.26,110.35,114.23,114.68], 'C':['big','small','big','small','small']})
min_max_scaler = preprocessing.MinMaxScaler()
def scaleColumns(df, cols_to_scale):
for col in cols_to_scale:
df[col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest[col])),columns=[col])
return df
dfTest
A B C
0 14.00 103.02 big
1 90.20 107.26 small
2 90.95 110.35 big
3 96.27 114.23 small
4 91.21 114.68 small
scaled_df = scaleColumns(dfTest,['A','B'])
scaled_df
A B C
0 0.000000 0.000000 big
1 0.926219 0.363636 small
2 0.935335 0.628645 big
3 1.000000 0.961407 small
4 0.938495 1.000000 small
Bu dönüşümü yapmanın tercih edilen / en verimli yolu bu mu merak ediyorum. Df.apply'i kullanmanın daha iyi bir yolu var mı?
Çalışmak için aşağıdaki kodu alamadığıma da şaşırdım:
bad_output = min_max_scaler.fit_transform(dfTest['A'])
Ölçekleyiciye bir veri çerçevesinin tamamını iletirsem, çalışır:
dfTest2 = dfTest.drop('C', axis = 1)
good_output = min_max_scaler.fit_transform(dfTest2)
good_output
Ölçekleyiciye bir dizi geçirmenin neden başarısız olduğu kafam karıştı. Yukarıdaki tam çalışma kodumda, ölçekleyiciye bir dizi geçirmeyi ve ardından veri çerçevesi sütununu = ölçeklenmiş seriye ayarlamayı ummuştum. Bu sorunun birkaç yerde daha sorulduğunu gördüm, ancak iyi bir cevap bulamadım. Burada neler olup bittiğini anlamak için herhangi bir yardım çok takdir edilecektir!
bad_output = in_max_scaler.fit_transform(dfTest['A'].values)
da işe yaramadı. @larsmans - evet bu yoldan gitmeyi düşünmüştüm, sadece bir güçlük gibi görünüyor. Pandaların tam bir veri çerçevesini bir sklearn fonksiyonuna geçirebilmesi, ancak bir seriye geçememesi bir hata olup olmadığını bilmiyorum. Bir veri çerçevesine ilişkin anlayışım, bunun bir dizi diktesi olduğuydu. "Veri Analizi için Python" kitabında okunduğunda, pandaların NumPy merkezli uygulamalarda kullanımını kolaylaştırmak için numpy üzerine inşa edildiğini belirtir.
bad_output = min_max_scaler.fit_transform(dfTest['A'].values)
?values
özniteliğe erişmek bir numpy dizisi döndürür, bazı nedenlerden dolayı bazen scikit learn api pandaların bir numpy dizisi döndürmesini sağlayan doğru yöntemi doğru bir şekilde çağırır ve bazen de döndürmez.