如何对多个列使用OneHotEncoder并自动删除每个列的第一个虚拟变量?

这是一个包含3列和3行的数据集

姓名 组织 部门

Manie   ABC2 财务

Joyce   ABC1 人力资源

Ami   NSV2 人力资源

这是我目前的代码:

到这里为止都正常,那么我如何删除每个列的第一个虚拟变量列呢?

# 导入库import numpy as npimport matplotlib.pyplot as pltimport pandas as pd# 导入数据集dataset = pd.read_csv('Data1.csv',encoding = "cp1252")X = dataset.values# 编码分类数据from sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder_X_0 = LabelEncoder()X[:, 0] = labelencoder_X_0.fit_transform(X[:, 0])labelencoder_X_1 = LabelEncoder()X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])labelencoder_X_2 = LabelEncoder()X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])onehotencoder = OneHotEncoder(categorical_features = "all")X = onehotencoder.fit_transform(X).toarray()

回答:

import pandas as pddf = pd.DataFrame({'name': ['Manie', 'Joyce', 'Ami'],                   'Org':  ['ABC2', 'ABC1', 'NSV2'],                   'Dept': ['Finance', 'HR', 'HR']                })df_2 = pd.get_dummies(df,drop_first=True)

测试:

print(df_2)   Dept_HR  Org_ABC2  Org_NSV2  name_Joyce  name_Manie0        0         1         0           0           11        1         0         0           1           02        1         0         1           0           0 

关于您在pd.get_dummies(X, columns =[1:]中遇到的错误的更新:

根据文档页面columns参数接受“列名”。因此,以下代码将有效:

df_2 = pd.get_dummies(df, columns=['Org', 'Dept'], drop_first=True)

输出:

    name  Org_ABC2  Org_NSV2  Dept_HR0  Manie         1         0        01  Joyce         0         0        12    Ami         0         1        1

如果您真的想按位置定义您的列,可以这样做:

column_names_for_onehot = df.columns[1:]df_2 = pd.get_dummies(df, columns=column_names_for_onehot, drop_first=True)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注