我在python中,并且具有类似以下结构的数据,其中包含分类和数字混合
subject_id hour_measure urinecolor blood pressure
3 1.00 red
1.15 high
4 2.00 yellow low
我想使用热甲板插补进行插补,但是我发现应该将其编码为数字然后进行插补
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
df= pd.read_csv('path')
enc.fit(df)
enc.transform(df)
当我尝试进行编码时,它要求我首先填充缺失值,因此在进行编码时如何处理缺失值?在对分类数据进行编码时,插补会生成缺失值的值,插补后如何将其反转为原始数据?
请,有人帮助我解决这个问题吗?
最佳答案
基本上,您需要使用scikit-learn管道:
import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
X = np.array(
[['cat1', 'cat1'],
['cat2', np.nan],
[np.nan, 'cat2']],
dtype=object
)
encoder = make_pipeline(
SimpleImputer(strategy="constant", fill_value="missing"),
OneHotEncoder(sparse=False)
)
print(encoder.fit_transform(X))
print(encoder[-1].categories_)
[[1. 0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0. 1.]
[0. 0. 1. 0. 1. 0.]]
[array(['cat1', 'cat2', 'missing'], dtype=object), array(['cat1', 'cat2', 'missing'], dtype=object)]
在这里,缺失值由某些
np.nan
值表示。首先将它们替换为字符串'missing'
。然后,每个类别将成为一列。因此,“缺失”信息将由编码后的一列表示。您可能不想从数据中删除此信息。如果需要,可以删除相应的列。
关于python - 编码数据以便插补然后解码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59370700/