pandas.get_dummies
每个分类值发出一个虚拟变量。是否有一些自动的,简单的方法来要求它只创建N-1个虚拟变量? (只是摆脱一个“基线”变量任意)?如何让熊猫get_dummies发出N-1变量以避免共线性?
需要避免我们数据集中的共线性。
pandas.get_dummies
每个分类值发出一个虚拟变量。是否有一些自动的,简单的方法来要求它只创建N-1个虚拟变量? (只是摆脱一个“基线”变量任意)?如何让熊猫get_dummies发出N-1变量以避免共线性?
需要避免我们数据集中的共线性。
Pandas版本0.18.0实现了您正在寻找的内容:drop_first
选项。这里有一个例子:
In [1]: import pandas as pd
In [2]: pd.__version__
Out[2]: u'0.18.1'
In [3]: s=pd.Series(list('abcbacb'))
In [4]: pd.get_dummies(s,drop_first=True)
Out[4]:
b c
0 0.0 0.0
1 1.0 0.0
2 0.0 1.0
3 1.0 0.0
4 0.0 0.0
5 0.0 1.0
6 1.0 0.0
有很多方法可以做到这一点。
在调用get_dummies
之前,最简单的方法是用None
代替其中一个值。假设你有:
import pandas as pd
import numpy as np
s = pd.Series(list('babca'))
>> s
0 b
1 a
2 b
3 c
4 a
然后使用:
>> pd.get_dummies(np.where(s == s.unique()[0], None, s))
a c
0 0 0
1 1 0
2 0 0
3 0 1
4 1 0
下降b
。
(当然,你需要考虑,如果你的类别栏尚未包含None
)。
另一种方法是使用prefix
参数get_dummies
:
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False)
前缀:字符串,字符串列表或字符串字典,默认值无 - Stri ng添加DataFrame列名在调用DataFrame上的get_dummies时,传递一个长度等于列数的列表。或者,前缀可以是将列名称映射到前缀的字典。
这将为所有结果列添加一些前缀,然后您可以使用此前缀删除其中一个列(使其唯一)。
添加一些代码/详细讲解,请 – sinhayash
'pd.get_dummies(S).iloc [:,1:]' – JohnE