Pandas 如何在Python中的序号列上创建虚拟变量
我是Python新手。我使用pandas get_dummies在分类列上创建了虚拟列。如何在序号列上创建虚拟列(假设列评级的值为1,2,3…,10)考虑数据帧Pandas 如何在Python中的序号列上创建虚拟变量,pandas,python-3.6,one-hot-encoding,Pandas,Python 3.6,One Hot Encoding,我是Python新手。我使用pandas get_dummies在分类列上创建了虚拟列。如何在序号列上创建虚拟列(假设列评级的值为1,2,3…,10)考虑数据帧df df = pd.DataFrame(dict(Cats=list('abcdcba'), Ords=[3, 2, 1, 0, 1, 2, 3])) df Cats Ords 0 a 3 1 b 2 2 c 1 3 d 0 4 c 1 5 b
df
df = pd.DataFrame(dict(Cats=list('abcdcba'), Ords=[3, 2, 1, 0, 1, 2, 3]))
df
Cats Ords
0 a 3
1 b 2
2 c 1
3 d 0
4 c 1
5 b 2
6 a 3
pd.get\u dummie
对任一列的作用相同
带有
df.Cats
pd.get_dummies(df.Cats)
a b c d
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
4 0 0 1 0
5 0 1 0 0
6 1 0 0 0
pd.get_dummies(df)
Ords Cats_a Cats_b Cats_c Cats_d
0 3 1 0 0 0
1 2 0 1 0 0
2 1 0 0 1 0
3 0 0 0 0 1
4 1 0 0 1 0
5 2 0 1 0 0
6 3 1 0 0 0
带有df.Ords
0 1 2 3
0 0 0 0 1
1 0 0 1 0
2 0 1 0 0
3 1 0 0 0
4 0 1 0 0
5 0 0 1 0
6 0 0 0 1
同时使用这两种方法
pd.get_dummies(df.Cats)
a b c d
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
4 0 0 1 0
5 0 1 0 0
6 1 0 0 0
pd.get_dummies(df)
Ords Cats_a Cats_b Cats_c Cats_d
0 3 1 0 0 0
1 2 0 1 0 0
2 1 0 0 1 0
3 0 0 0 0 1
4 1 0 0 1 0
5 2 0 1 0 0
6 3 1 0 0 0
请注意,它拆分为Cats
,而不是Ords
让我们通过添加另一个Cats2
列并调用pd.get\u dummies
pd.get_dummies(df.assign(Cats2=df.Cats)))
Ords Cats_a Cats_b Cats_c Cats_d Cats2_a Cats2_b Cats2_c Cats2_d
0 3 1 0 0 0 1 0 0 0
1 2 0 1 0 0 0 1 0 0
2 1 0 0 1 0 0 0 1 0
3 0 0 0 0 1 0 0 0 1
4 1 0 0 1 0 0 0 1 0
5 2 0 1 0 0 0 1 0 0
6 3 1 0 0 0 1 0 0 0
有趣的是,它同时拆分了
对象
列,而不是数字列。您能提供一个输入和输出示例吗?如果您的值已经是数字,那么虚拟变量是什么?Colx Rating Rating_1 Rating_2 Rating_3 a 1 1 0 0 a 1 0 b 2 0 1 0 c 3 0 1表示我要创建列评级栏中的评级1、评级2、评级3这是一个很好的解决方案。如果我理解正确,我认为在这种情况下,Pandas无法知道数字列是有序的,而不是区间或连续数据,在这种情况下,创建虚拟变量是没有意义的。将Ords
列转换为字符串:df.Ords=df.Ords.astype(str)
应将所有数据拆分为虚拟变量?@johnchase如果在有序列上运行pd.get_dummies
,它将按预期工作。我很惊讶地看到熊猫在数据帧上运行pd.get_dummies
时做出了区分。@piRSquared:谢谢你的回复。这就是我观察到的,当我使用pd.get_dummies(df)时,它只对分类列进行虚拟编码。我有多个序号列,如果可能的话,我希望一次性在这些列上创建虚拟列。