我有一个数据集,其未命中数据显示为? (不是由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
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表示其列的平均值?
我不确定您有哪个错误,很可能是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)