【问题标题】:Python how to inverse back the actual values after using one-hot-encode/pd.get_dummiesPython 如何在使用 one-hot-encode/pd.get_dummies 后反转实际值
【发布时间】:2019-12-23 07:17:11
【问题描述】:

我正在使用

pd.get_dummies

将具有 4 个标签(字符串)的分类向量转换为具有 4 列的二维数组。 但是,在我找不到返回原始值的方法之后。 使用时我也无法做到这一点

sklearn.preprocessing.OneHotEncoder

对分类向量进行一次热编码但之后能够反转原始值的最佳方法是什么?

【问题讨论】:

标签: python pandas data-science categorical-data one-hot-encoding


【解决方案1】:

您可以使用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()

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

希望这会有所帮助!

【讨论】:

  • 有没有办法打印category-to-key字典?
【解决方案2】:

您可以找到行的最大值并将其替换为该列名。 将 numpy 导入为 np 将熊猫导入为 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

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2016-11-15
    • 2023-01-16
    • 2021-11-16
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多