这是一个包含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)