如何在 pandas 中创建不具有多重共线性的虚拟变量?

How can one create dummy variables in pandas that do not have multicollinearity?

使用 Anaconda,Python 2.7.11,pandas 0.17.1,Mac OS X 10.11 (El Capitan),你如何删除一个虚拟变量从每一列中提取虚拟变量以避免在拟合统计模型时出现多重共线性(或虚拟变量陷阱)?

如果输入:

import pandas as pd
s = pd.Series(list('abca'))
pd.get_dummies(s)

返回的是:

   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

我想删除 a、b 或 c 列以避免多重共线性。

此功能将添加到 pandas 版本 0.18.0(当前为 0.17.1)中。但是,如果您希望更快地使用此功能,则必须从源代码构建 pandas 库。以下说明将向您展示如何执行此操作。首先,在终端中,键入以下命令卸载 pandas:

conda uninstall pandas

然后,导航到站点包,其中 Python 存储其库:

cd /Users/[username]/anaconda/lib/python2.7/site-packages

其中 [用户名] 是您的用户名。这条路径的根可能是您当前激活的 Python 环境所在的任何地方,以推广到 Anaconda 之外。要显示 python 的激活版本所在的位置,请键入:

which python

在终端中输入这些命令以克隆到一个存储库中,其中有人向 pandas.get_dummies 命令添加了额外的功能:

git clone https://github.com/BranYang/pandas
cd pandas
python setup.py build_ext --inplace --force
python setup.py install

然后,打开Python(或IPython):

ipython

并输入:

import pandas as pd
s = pd.Series(list('abca'))
pd.get_dummies(s, drop_first = True)

这将显示:

   b  c
0  0  0
1  1  0
2  0  1
3  0  0

因此,pd.get_dummies 删除了您的第一列并且您避免了虚拟变量陷阱!