我正在使用sklearn库中的多重插补器来插补雨水数据集中的一些缺失值,其中包含雨水站和雨水数据(每个站有一列,索引是DateTime)。我能够运行IterativeInputer并获得一个填充了所有缺失值的输出。问题是输出包含负值。可以更改他输入的de min_值,但会为所有列设置唯一值。我想在插补前根据每列的最小值设置一个最小值There is a response here in Stack这个答案,但我不知道怎么做
我正在使用的代码:
import pandas as pd
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.compose import make_column_transformer
from sklearn.compose import make_column_selector
#Babitonga's region stations
babi_ana = pd.read_csv(all_csv_files[0]).set_index("Time") #Here a read the csv data
# Transforming my index to datetime
babi_ana.index = pd.to_datetime(babi_ana.index)
mask = (babi_ana.index > ini1) & (babi_ana.index <= fim1) #Selecting the date range
babi_ana1 = babi_ana.loc[mask]
# Applying the imputer
imputer_data = IterativeImputer(random_state = 0,skip_complete=True,sample_posterior=True, max_iter = 10, missing_values = np.nan)
data = babi_ana1
minimum = data.iloc[:,:].min(axis=0) #No negative values from the original
imputer_data.fit(data.iloc[:,:].values)
data_imputed = imputer_data.transform(data.iloc[:,:].values)
# Here I realize the output has negative values
data_imputed = pd.DataFrame(data_imputed)
minimun_after = data_imputed.iloc[:,:].min(axis=0) #several negative values, except for 2 stations
我希望能够根据插补前每个站的最大值和最小值使用min_value
和max_value
,如下所示:
max_imputer = data.iloc[:,:].max(axis = 0)
min_imputer = data.iloc[:,:].min(axis = 0)
在这个问题上有很大的改进:)
我在这里读了更多关于
IterativeImputer
的内容:https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html#sklearn.impute.IterativeImputer它似乎可以在构造函数上使用
min_value
参数,它需要浮点或数组。如果数据的所有特征(列)都有一个最小值,则可以使用浮点替代值例如,如果希望所有功能(列)中的最小可能值为
0
,则可以将代码更改为:imputer_data = IterativeImputer(random_state = 0, skip_complete = True,sample_posterior = True, max_iter = 10, missing_values = np.nan, min_value = 0)
另一方面,如果希望不同的特征具有不同的最小值,则需要使用与特征数量相同的数组。例如:如果您有2个功能,且最小值应分别为0和5,则您可以将代码更改为:
imputer_data = IterativeImputer(random_state = 0, skip_complete = True,sample_posterior = True, max_iter = 10, missing_values = np.nan, min_value = [0, 5])
您可以对
max_value
参数执行相同的操作第一个更改应该确保不会再得到任何负插补值
如果您想基于已有的数据使用
min
和max
值,那么第一步应该是编写代码,在数据中遍历该特性,并获取其中的最小值和最大值。这应该与在数组中获取最小值和最大值相同,如果您不确定如何执行,您可能会找到许多Python示例最后,对于我来说,在只使用正数据拟合后,插补器如何输出负数据仍然有点奇怪。因此,我要再次检查
data.iloc[:,:].values
是否确实是您想要的数据,其格式为插补器所期望的格式相关问题 更多 >
编程相关推荐