我有一个带有大量分类列的Pandas数据帧,我希望将其传递给scikit learn。由于scikit-learn只接受数组作为参数,所以我需要将所有分类列转换为伪变量。例如,我有一个宗教专栏,其中包含"基督教"、"穆斯林"one_answers"印度教"类别,这些类别应该转换为三个虚拟变量,根据这些值设置为0或1。
我找到的最好的解决方案是将数据帧拆分为分类变量和非分类变量,然后对所有分类变量使用pandas.get_dummies,然后重新组合。
有更快的方法吗?
您可以获取数据帧(df)并将其与要转换的列列表一起传递给get_dummies()调用。
假设您有一个带有一堆列的df,并且您希望仅从"宗教"列创建伪变量。
df = pd.DataFrame({'Name': ['Adam', 'Brad', 'Charlie', 'David','Eric'],
'Religion': ['Christian', 'Hindu', 'Muslim','Hindu','Christian'],
'Age': [28, 25, 35, 24, 39,],
'State':['CA','CA','AZ','NV','OR']})
以下是df的样子:
Age Name Religion State
0 28 Adam Christian CA
1 25 Brad Hindu CA
2 35 Charlie Muslim AZ
3 24 David Hindu NV
4 39 Eric Christian OR
创建"宗教"列的伪变量:
df = pd.get_dummies(df, columns=['Religion'])
输出:
Age Name State Religion_Christian Religion_Hindu Religion_Muslim
0 28 Adam CA 1 0 0
1 25 Brad CA 0 1 0
2 35 Charlie AZ 0 0 1
3 24 David NV 0 1 0
4 39 Eric OR 1 0 0