Nir*_*r_J 5 python pandas sklearn-pandas one-hot-encoding
我有一个与此类似的pandas数据帧:
Col1 ABC
0 XYZ A
1 XYZ B
2 XYZ C
Run Code Online (Sandbox Code Playgroud)
通过get_dummies()在ABC列上使用pandas 函数,我可以得到:
Col1 A B C
0 XYZ 1 0 0
1 XYZ 0 1 0
2 XYZ 0 0 1
Run Code Online (Sandbox Code Playgroud)
虽然我需要这样的东西,ABC列有一个list / array数据类型:
Col1 ABC
0 XYZ [1,0,0]
1 XYZ [0,1,0]
2 XYZ [0,0,1]
Run Code Online (Sandbox Code Playgroud)
我尝试使用该get_dummies函数,然后将所有列组合到我想要的列中.我发现很多答案解释了如何将多个列组合成字符串,如下所示:在pandas/python中的数据框中组合两列文本.但我无法想出一种方法将它们组合成一个列表.
这个问题介绍了使用sklearn的想法OneHotEncoder,但我无法让它工作.如何对一个pandas数据帧的一列进行单热编码?
还有一件事:我遇到的所有答案都有解决方案,其中列名称必须在组合时手动输入.有没有办法使用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]
Run Code Online (Sandbox Code Playgroud)
熊猫替代品:
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]
Run Code Online (Sandbox Code Playgroud)
你可以只使用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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5580 次 |
| 最近记录: |