替换未命中数据,显示为?在数据集中,其平均值为SimpleImputer

问题描述 投票:0回答:1

我有一个数据集,其未命中数据显示为? (不是由NaN提供)。我想用其专栏文章代替它们。例如我的数据集是这样的:

0,1,2,3 
1,2,5,1.2 
2,4,8,2.3 
3,5,?,1 

我要替换吗?用(2+5+8)/3=5。因此数据将如下所示:

0,1,2,3 
1,2,5,1.2 
2,4,8,2.3 
3,5,5,1 

我基于this页面和this问题编写此代码。

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
dataset_dataframe = pd.read_csv(DATASET_PATH, header = None)
for i in range(0 , len(dataset_dataframe.columns)-1):
    if dataset_dataframe[i].dtype != np.number:
        dataset_dataframe[i] = dataset_dataframe[i].replace('?' , np.nan)
        print("%s -\n %s" %(i , dataset_dataframe[i]))
        imputer_miss_data = SimpleImputer(missing_values=np.nan, strategy='mean')
        corrected_column = imputer_miss_data.fit_transform(dataset_dataframe[i])
        dataset_dataframe[i]=corrected_column
        print(dataset_dataframe[i])

但是它不起作用。我应该怎么做才能替换显示为的未命中数据?在数据集中,使用SimpleImputer表示其列的平均值?

python
1个回答
0
投票

我不确定您有哪个错误,很可能是ValueError,因为SimpleImputer需要2D输入。这是一个基于您的代码的工作示例(请注意重塑):

 df = pd.DataFrame(data=[[0,1,2,3],
                            [1,2,5,1.2 ],
                            [2,4,8,2.3 ],
                            ['?',5,'?',1 ]],
                      columns = ['a','b','c','d'])
    df = df.replace('?' , np.nan)

for col in df.columns:
    if any(df[col].isna()):
        imputer_miss_data = SimpleImputer(missing_values=np.nan, strategy='mean')
        corrected_column = imputer_miss_data.fit_transform(df[col].values.reshape(-1, 1))
        df[col] = corrected_column

但是无需迭代列。只需将imputer应用于整个数据框:

imputer_miss_data = SimpleImputer(missing_values=np.nan, strategy='mean')
df = imputer_miss_data.fit_transform(df)
© www.soinside.com 2019 - 2024. All rights reserved.