我在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/

10-09 03:03