Python 如何在使用 one-hot-encode/pd 后反转实际值。get_dummies

Python how to inverse back the actual values after using one-hot-encode/pd.get_dummies

我正在使用

pd.get_dummies

将具有 4 个标签(字符串)的分类向量转换为具有 4 列的二维数组。 但是,之后我找不到恢复原始值的方法。 使用

时我也无法做到这一点

sklearn.preprocessing.OneHotEncoder

单热编码分类向量的最佳方法是什么,但之后能够反转原始值?

可以利用sklearn.preprocessing.OneHotEncoderinverse_transform方法来完成。我用下面的例子来说明它:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male'], ['Female'], ['Female']]
enc.fit(X)
enc.categories_

[array(['Female', 'Male'], dtype=object)]

enc.transform([['Female'], ['Male']]).toarray()

array([[1., 0.],
       [0., 1.]])

enc.inverse_transform([[0, 1], [1,0], [0, 1]])

array([['Male'],
       ['Female'],
       ['Male']], dtype=object)

要获取类别到键的字典,您可以这样做:

A = {}
for i in enc.categories_[0]:
    A[i] = enc.transform([[i]]).toarray()

但可能有更好的方法来做到这一点。

希望对您有所帮助!

您可以找到行的最大值并将其替换为该列名称。 将 numpy 导入为 np 将 pandas 导入为 pd

df = pd.DataFrame({"A":[0,1,0,0],"B":[1,0,0,0],"C":[0,0,1,0], "D":[0,0,0,1]})

def decode(row):
    for c in df.columns:
        if row[c]==1:
            return c


df = df.apply(decode,axis=1)
print(df)

输出:

0    B
1    A
2    C
3    D
dtype: object