使用 One Hot 编码后在列中显示特征名称
Display feature names in columns after using One Hot encoding
我在 csv 中有一列是水果的名称,我想将其转换为数组。
示例 csv 列:
Names:
Apple
Banana
Pear
Watermelom
Jackfruit
..
..
..
栏目中有大约 400 个水果名称
我使用了一个热编码但无法显示列名称(csv 列的一行中的每个水果名称)
我现在的代码是:
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
dataset = pd.read_csv('D:/fruits.csv')
X= dataset.iloc[:, 0].values
labelencoder_X = LabelEncoder()
D= labelencoder_X.fit_transform(X)
D = D.reshape(-1, 1)
onehotencoder = OneHotEncoder(sparse=False, categorical_features = [0])
X = onehotencoder.fit_transform(D)
这会将列的数据转换为一个 numpy 数组,但列名称为 [0 1 2 3 .. ..] 我想要作为 csv 的每一行名称,例如 [Apple Banana Pear Watermelon .. ..]
如何在使用一种热编码后保留列名
原答案:
一种相当有效的 OneHotEncode 方法是使用 pd.get_dummies
。
我应用了示例数据:
data = {'Names':['Apple','Banana','Pear', 'Watermelon']}
df = pd.DataFrame(data=data)
df_new = pd.get_dummies(df)
print(df_new)
原始 df:
Names
0 Apple
1 Banana
2 Pear
3 Watermelon
编码 df:
Names_Apple Names_Banana Names_Pear Names_Watermelon
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
编辑:
假设我们的数据框包含 2 个分类特征和 2 个数字特征。我们只想对 2 个分类列中的 1 个进行 OneHotEncode。
正在生成虚拟数据:
data = {'Names':['Apple','Banana','Pear', 'Watermelom'],
'Category' :['A','B','A','B'],
'Val1':[10,20,30,30],
'Val2':[60,70,80,90]}
df = pd.DataFrame(data=data)
Names Category Val1 Val2
0 Apple A 10 60
1 Banana B 20 70
2 Pear A 30 80
3 Watermelom B 30 90
如果我们只想进行 OneHotEncode Names
我们会通过
df_new = pd.get_dummies(df, columns=['Names'])
print(df_new)
你可以参考这个documentation。通过定义 columns
我们将只对感兴趣的列进行编码。
编码输出:
Category Val1 Val2 Names_Apple Names_Banana Names_Pear Names_Watermelom
0 A 10 60 1 0 0 0
1 B 20 70 0 1 0 0
2 A 30 80 0 0 1 0
3 B 30 90 0 0 0 1
我在 csv 中有一列是水果的名称,我想将其转换为数组。
示例 csv 列:
Names:
Apple
Banana
Pear
Watermelom
Jackfruit
..
..
..
栏目中有大约 400 个水果名称
我使用了一个热编码但无法显示列名称(csv 列的一行中的每个水果名称)
我现在的代码是:
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
dataset = pd.read_csv('D:/fruits.csv')
X= dataset.iloc[:, 0].values
labelencoder_X = LabelEncoder()
D= labelencoder_X.fit_transform(X)
D = D.reshape(-1, 1)
onehotencoder = OneHotEncoder(sparse=False, categorical_features = [0])
X = onehotencoder.fit_transform(D)
这会将列的数据转换为一个 numpy 数组,但列名称为 [0 1 2 3 .. ..] 我想要作为 csv 的每一行名称,例如 [Apple Banana Pear Watermelon .. ..]
如何在使用一种热编码后保留列名
原答案:
一种相当有效的 OneHotEncode 方法是使用 pd.get_dummies
。
我应用了示例数据:
data = {'Names':['Apple','Banana','Pear', 'Watermelon']}
df = pd.DataFrame(data=data)
df_new = pd.get_dummies(df)
print(df_new)
原始 df:
Names
0 Apple
1 Banana
2 Pear
3 Watermelon
编码 df:
Names_Apple Names_Banana Names_Pear Names_Watermelon
0 1 0 0 0
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
编辑:
假设我们的数据框包含 2 个分类特征和 2 个数字特征。我们只想对 2 个分类列中的 1 个进行 OneHotEncode。
正在生成虚拟数据:
data = {'Names':['Apple','Banana','Pear', 'Watermelom'],
'Category' :['A','B','A','B'],
'Val1':[10,20,30,30],
'Val2':[60,70,80,90]}
df = pd.DataFrame(data=data)
Names Category Val1 Val2
0 Apple A 10 60
1 Banana B 20 70
2 Pear A 30 80
3 Watermelom B 30 90
如果我们只想进行 OneHotEncode Names
我们会通过
df_new = pd.get_dummies(df, columns=['Names'])
print(df_new)
你可以参考这个documentation。通过定义 columns
我们将只对感兴趣的列进行编码。
编码输出:
Category Val1 Val2 Names_Apple Names_Banana Names_Pear Names_Watermelom
0 A 10 60 1 0 0 0
1 B 20 70 0 1 0 0
2 A 30 80 0 0 1 0
3 B 30 90 0 0 0 1