私はこれに似たpandasデータフレームを持っています:
_ Col1 ABC
0 XYZ A
1 XYZ B
2 XYZ C
_
列ABCでpandas get_dummies()
関数を使用すると、次のようになります。
_ Col1 A B C
0 XYZ 1 0 0
1 XYZ 0 1 0
2 XYZ 0 0 1
_
ABC列のデータ型が_list / array
_の場合、次のようなものが必要です。
_ Col1 ABC
0 XYZ [1,0,0]
1 XYZ [0,1,0]
2 XYZ [0,0,1]
_
_get_dummies
_関数を使用して、すべての列を目的の列に結合してみました。次のように、複数の列を文字列として組み合わせる方法を説明する多くの回答を見つけました: pandas/pythonのデータフレームで2列のテキストを組み合わせる 。しかし、それらをリストとして組み合わせる方法がわかりません。
この質問では、sklearnのOneHotEncoder
を使用するというアイデアが紹介されましたが、それを機能させることができませんでした。 a pandas dataframe? の1つの列をワンホットエンコードするにはどうすればよいですか?
もう1つ、私が遭遇したすべての回答には、列名を組み合わせながら手動で入力する必要があるという解決策がありました。 Dataframe.iloc()
またはスプライシングメカニズムを使用して列をリストに結合する方法はありますか?
sklearn.preprocessing.LabelBinarizer の使用例を次に示します。
In [361]: from sklearn.preprocessing import LabelBinarizer
In [362]: lb = LabelBinarizer()
In [363]: df['new'] = lb.fit_transform(df['ABC']).tolist()
In [364]: df
Out[364]:
Col1 ABC new
0 XYZ A [1, 0, 0]
1 XYZ B [0, 1, 0]
2 XYZ C [0, 0, 1]
パンダの代替:
In [370]: df['new'] = df['ABC'].str.get_dummies().values.tolist()
In [371]: df
Out[371]:
Col1 ABC new
0 XYZ A [1, 0, 0]
1 XYZ B [0, 1, 0]
2 XYZ C [0, 0, 1]
tolist()
を使用できます。
df['ABC'] = pd.get_dummies(df.ABC).values.tolist()
Col1 ABC
0 XYZ [1, 0, 0]
1 XYZ [0, 1, 0]
2 XYZ [0, 0, 1]
このようなpd.DataFrameがある場合:
>>> df
Col1 A B C
0 XYZ 1 0 0
1 XYZ 0 1 0
2 XYZ 0 0 1
あなたはいつでもこのようなことをすることができます:
>>> df.apply(lambda s: list(s[1:]), axis=1)
0 [1, 0, 0]
1 [0, 1, 0]
2 [0, 0, 1]
dtype: object
これは基本的に行のforループであることに注意してください。列にはnotlist
データ型があることに注意してください。object
である必要があります。これにより、データフレーム操作で速度の利点を利用できなくなります。 numpy
の。
カテゴリ列df
を持つデータフレームABC
がある場合は、これを使用してワンホットベクトルの新しい列を作成できます。
df['new_column'] = list(pandas.get_dummies(df['AB]).get_values())