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.OneHotEncoder
的inverse_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
我正在使用
pd.get_dummies
将具有 4 个标签(字符串)的分类向量转换为具有 4 列的二维数组。 但是,之后我找不到恢复原始值的方法。 使用
时我也无法做到这一点sklearn.preprocessing.OneHotEncoder
单热编码分类向量的最佳方法是什么,但之后能够反转原始值?
可以利用sklearn.preprocessing.OneHotEncoder
的inverse_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