我正在处理一个数据集,其中有多个具有不同值的字符串列,并希望应用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()
时,它还是一样,这是怎么回事?
答案 0 :(得分:0)
使用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)
。