鶴見教育工学研究所

scikit-learnのアップデートでPandasデータフレームのまま前処理が可能に

Tags:

発表から1か月経っているので、Python界隈ではすでに知れ渡っているのかもしれませんが。

Scikit-Learn’s Transformers Now Output Pandas Dataframes!という記事がありました。記事によると、10月17日にscikit-learn開発チームが、「今後、sklearnの各種TransformerでPandasデータフレーム形式の出力ができるようになる」と発表したそうです。1

これは、開発版において、StandardScaler() などのTransformerに、set_output() というメソッド (API) が追加されたことによります。

Transformerオブジェクトを作成する際に、set_output(transform="pandas") と指定することで、Pandasデータフレームを受け取って、出力もデータフレームで返すようになります。開発版をインストールしないと使えません2が、以下のようなことができるようになります (ドキュメントの丸写しですが)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X, y = load_iris(as_frame=True, return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

scaler = StandardScaler().set_output(transform="pandas")

scaler.fit(X_train)
X_test_scaled = scaler.transform(X_test)
X_test_scaled.head()
Scikit-Learn開発版をインストールしてサンプルを実行した様子

Scikit-Learn開発版をインストールしてサンプルを実行した様子

これまでは、PandasとScikit-Learnの連携が部分的だったので、NumPy配列を介してデータをやり取りしていましたが、Scikit-LearnのTransformersがPandasデータフレームでの入出力に対応すると、より効率的に前処理プログラムを記述できますね。まだ正式リリースではないですが、研修教材も、そういうのを把握したうえで更新していかなくてはなりません。


  1. scikit-learnってlinkedinでニュースを発信するんですね。 ↩︎

  2. 当然、バグが潜む可能性も高いので、実使用環境にインストールすることは推奨されません。 ↩︎