在 python 中对数据帧应用一种热编码
Apply one hot encoding on a dataframe in python
我正在处理一个数据集,其中我有各种具有不同值的字符串列,并且想应用 one hot encoding
.
这是示例数据集:
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0-50 StoreSale Clothes 8-Apr above 100 FatimaStore Shoes
0-50 StoreSale Clothes 8-Apr 0-50 DiscountWorld Clothes
51-100 CleanShop Clothes 4-Dec 51-100 BetterUncle Shoes
所以,这里我需要在 pvf_cat
上应用单热编码,就像我有许多其他列一样,我已经将这些列创建为 str_cols
这是我如何应用 one-hot-encoding
:
for col in str_cols:
data = df[str(col)]
values = list(data)
# print(values)
# integer encode
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
print(integer_encoded)
# one hot encode
encoded = to_categorical(integer_encoded)
print(encoded)
# invert encoding
inverted = argmax(encoded[0])
print(inverted)
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
但它不影响数据集,当我打印 df.head()
它仍然是一样的,这里有什么问题?
使用 pd.get_dummies()
比为此编写您自己的代码更容易,而且可能也更快。
df = pd.get_dummies(df, columns=['pfv_cat'])
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat_Clothes pfv_cat_Shoes
0 0-50 StoreSale Clothes 8-apr above 100 FatimaStore 0 1
1 0-50 StoreSale Clothes 8-apr 0-50 DiscountWorld 1 0
2 51-100 CleanShop Clothes 4-dec 51-100 BetterUncle 0 1
在 columns=
参数后的列表中,您可以指定需要 OneHotEncoded 的列。所以在你的情况下,这可能是 df = pd.get_dummies(df, columns=str_cols)
.
我正在处理一个数据集,其中我有各种具有不同值的字符串列,并且想应用 one hot encoding
.
这是示例数据集:
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0-50 StoreSale Clothes 8-Apr above 100 FatimaStore Shoes
0-50 StoreSale Clothes 8-Apr 0-50 DiscountWorld Clothes
51-100 CleanShop Clothes 4-Dec 51-100 BetterUncle Shoes
所以,这里我需要在 pvf_cat
上应用单热编码,就像我有许多其他列一样,我已经将这些列创建为 str_cols
这是我如何应用 one-hot-encoding
:
for col in str_cols:
data = df[str(col)]
values = list(data)
# print(values)
# integer encode
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
print(integer_encoded)
# one hot encode
encoded = to_categorical(integer_encoded)
print(encoded)
# invert encoding
inverted = argmax(encoded[0])
print(inverted)
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
但它不影响数据集,当我打印 df.head()
它仍然是一样的,这里有什么问题?
使用 pd.get_dummies()
比为此编写您自己的代码更容易,而且可能也更快。
df = pd.get_dummies(df, columns=['pfv_cat'])
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat_Clothes pfv_cat_Shoes
0 0-50 StoreSale Clothes 8-apr above 100 FatimaStore 0 1
1 0-50 StoreSale Clothes 8-apr 0-50 DiscountWorld 1 0
2 51-100 CleanShop Clothes 4-dec 51-100 BetterUncle 0 1
在 columns=
参数后的列表中,您可以指定需要 OneHotEncoded 的列。所以在你的情况下,这可能是 df = pd.get_dummies(df, columns=str_cols)
.