sklearnでスケーリングするパンダのデータフレーム列

| |

混合タイプの列を持つパンダデータフレームがあり、sklearnのmin_max_scalerをいくつかの列に適用したいと思います。理想的には、これらの変換を適切に実行したいのですが、それを実行する方法をまだ理解していません。動作する次のコードを記述しました。

  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):cols_to_scaleのcolの場合:df [col] = pd.DataFrame(min_max_scaler.fit_transform(pd.DataFrame(dfTest [col]))、columns = [col])return df dfTest ABC 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 ABC 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  

これがこの変換を行うための好ましい/最も効率的な方法であるかどうか、興味があります。 df.applyを使用する方法はありますか?

次のコードが機能しないことにも驚いています。

bad_output = min_max_scaler.fit_transform(dfTest ["A"])

データフレーム全体をスケーラーに渡すと、次のように機能します。

dfTest2 = dfTest.drop( "C"、axis = 1)good_output = min_max_scaler.fit_transform(dfTest2 )good_output

シリーズをスケーラーに渡すことが失敗する理由がわかりません。上記の完全に機能するコードでは、シリーズをスケーラーに渡し、データフレーム列を次のように設定することを望んでいました。スケーリングされたシリーズ。この質問が他のいくつかの場所で尋ねられたのを見ましたが、良い答えは見つかりませんでした。ここで何が起こっているのかを理解する助けがあれば大歓迎です!