我想将一个由一系列元素组成的pandas列分解为多个列,因为它们具有唯一的元素,即one-hot-encode它们(其值1表示存在于行0中的给定元素,在缺少的情况下).
例如,采用数据帧df
Col1 Col2 Col3
C 33 [Apple, Orange, Banana]
A 2.5 [Apple, Grape]
B 42 [Banana]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
DF
Col1 Col2 Apple Orange Banana Grape
C 33 1 1 1 0
A 2.5 1 0 0 1
B 42 0 0 1 0
Run Code Online (Sandbox Code Playgroud)
我如何使用pandas/sklearn来实现这一目标?
给出变体长度特征列表:
features = [
['f1', 'f2', 'f3'],
['f2', 'f4', 'f5', 'f6'],
['f1', 'f2']
]
Run Code Online (Sandbox Code Playgroud)
其中,每个样品具有特征的变体数量和特征dtype是str和已经一热.
为了使用sklearn的特征选择实用程序,我必须将其转换features为2D数组,如下所示:
f1 f2 f3 f4 f5 f6
s1 1 1 1 0 0 0
s2 0 1 0 1 1 1
s3 1 1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我怎么能通过sklearn或numpy实现它?
我有一个类别(A,B,C,D)的列我想变成虚拟变量.问题是,这个列每行可以包含多个类别,如下所示:
DF = pd.DataFrame({'Col':['A', 'A, B', 'A, C', 'B, C, D', 'D']})
Col
0 A
1 A, B
2 A, C
3 B, C, D
4 D
Run Code Online (Sandbox Code Playgroud)
我现在的想法是首先使用','作为分隔符将变量拆分为多个字段,然后对结果进行伪编码.像这样的东西:
DF2 = DF['Col'].str.split(', ', expand = True)
0 1 2
0 A None None
1 A B None
2 A C None
3 B C D
4 D None None
pd.get_dummies(DF2)
0_A 0_B 0_D 1_B 1_C 2_D
0 1 0 0 0 0 0
1 1 0 0 1 0 0
2 …Run Code Online (Sandbox Code Playgroud)