一个带有 pandas get_dummies 缺失值的热编码
one hot encode with pandas get_dummies missing values
我有一个 DataFrame 形式的数据集,每一行都有一个 1-5 范围内的标签。我正在使用 pd.get_dummies()
进行一次热编码。如果我的数据集包含所有 5 个标签,则没有问题。然而,并非所有集合都包含所有 5 个数字,因此编码只是跳过缺失值并为进入的新数据集造成问题。我可以设置一个范围以便一个热编码知道应该有 5 个标签吗?或者我是否必须在执行编码之前将 1,2,3,4,5
附加到数组的末尾,然后删除最后 5 个条目?
正确编码:值 1-5 已编码
arr = np.array([1,2,5,3,1,5,1,4])
df = pd.DataFrame(arr, columns = ['test'])
hotarr = np.array(pd.get_dummies(df['test']))
>>>[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 0 0 1]
[0 0 1 0 0]
[1 0 0 0 0]
[0 0 0 0 1]
[1 0 0 0 0]
[0 0 0 1 0]]
缺失值编码:此数据集缺少标签 4。
arr = np.array([1,2,5,3,1,5,1,])
df = pd.DataFrame(arr, columns = ['test'])
hotarr = np.array(pd.get_dummies(df['test']))
>>>[[1 0 0 0]
[0 1 0 0]
[0 0 0 1]
[0 0 1 0]
[1 0 0 0]
[0 0 0 1]
[1 0 0 0]]
在编码前设置 CategoricalDtype
以确保在获取虚拟对象时表示所有类别:
import numpy as np
import pandas as pd
arr = np.array([1, 2, 5, 3, 1, 5, 1])
df = pd.DataFrame(arr, columns=['test'])
# Setup Categorical Dtype
df['test'] = df['test'].astype(pd.CategoricalDtype(categories=[1, 2, 3, 4, 5]))
hotarr = np.array(pd.get_dummies(df['test']))
print(hotarr)
或者可以在 get_dummies
之后 reindex
和 fill_value=0
添加缺少的列:
hotarr = np.array(pd.get_dummies(df['test'])
.reindex(columns=[1, 2, 3, 4, 5], fill_value=0))
尽管输入不包含 4:
,但两者都产生 5 列的 hotarr
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 0 0 1]
[0 0 1 0 0]
[1 0 0 0 0]
[0 0 0 0 1]
[1 0 0 0 0]]
我有一个 DataFrame 形式的数据集,每一行都有一个 1-5 范围内的标签。我正在使用 pd.get_dummies()
进行一次热编码。如果我的数据集包含所有 5 个标签,则没有问题。然而,并非所有集合都包含所有 5 个数字,因此编码只是跳过缺失值并为进入的新数据集造成问题。我可以设置一个范围以便一个热编码知道应该有 5 个标签吗?或者我是否必须在执行编码之前将 1,2,3,4,5
附加到数组的末尾,然后删除最后 5 个条目?
正确编码:值 1-5 已编码
arr = np.array([1,2,5,3,1,5,1,4])
df = pd.DataFrame(arr, columns = ['test'])
hotarr = np.array(pd.get_dummies(df['test']))
>>>[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 0 0 1]
[0 0 1 0 0]
[1 0 0 0 0]
[0 0 0 0 1]
[1 0 0 0 0]
[0 0 0 1 0]]
缺失值编码:此数据集缺少标签 4。
arr = np.array([1,2,5,3,1,5,1,])
df = pd.DataFrame(arr, columns = ['test'])
hotarr = np.array(pd.get_dummies(df['test']))
>>>[[1 0 0 0]
[0 1 0 0]
[0 0 0 1]
[0 0 1 0]
[1 0 0 0]
[0 0 0 1]
[1 0 0 0]]
在编码前设置 CategoricalDtype
以确保在获取虚拟对象时表示所有类别:
import numpy as np
import pandas as pd
arr = np.array([1, 2, 5, 3, 1, 5, 1])
df = pd.DataFrame(arr, columns=['test'])
# Setup Categorical Dtype
df['test'] = df['test'].astype(pd.CategoricalDtype(categories=[1, 2, 3, 4, 5]))
hotarr = np.array(pd.get_dummies(df['test']))
print(hotarr)
或者可以在 get_dummies
之后 reindex
和 fill_value=0
添加缺少的列:
hotarr = np.array(pd.get_dummies(df['test'])
.reindex(columns=[1, 2, 3, 4, 5], fill_value=0))
尽管输入不包含 4:
,但两者都产生 5 列的hotarr
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 0 0 1]
[0 0 1 0 0]
[1 0 0 0 0]
[0 0 0 0 1]
[1 0 0 0 0]]