【发布时间】:2020-09-08 17:13:03
【问题描述】:
我正在使用 sklearn 库中的 Multiple Imputer 来估算降雨数据集中的一些缺失值,其中包含降雨站和降雨数据(每个站都是一列,索引是 DateTime)。我能够运行 IterativeImputer 并获得填充了所有缺失值的输出。问题是输出包含负值。可以更改他估算的 de min_value,但它为所有列设置了唯一值。我想根据插补前每列的最小值设置一个 min_value 。 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)
【问题讨论】:
-
请发布您的代码,而不是对其进行口头描述。
-
很抱歉。
-
布莱恩,欢迎来到 StackOverflow :)。我认为您的问题缺少对您尝试做的事情,目标是什么以及出了什么问题的一些描述。这些将有助于获得更多答案。我不熟悉 Imputers 或 sklearn 库,但我建议您查看这个问题:stackoverflow.com/questions/38150330/… 和答案。如果不出意外,它将向您显示格式正确的问题/答案。祝你好运!
-
我在scikit-learn.org/stable/modules/impute.html 上阅读了一些关于 Imputer 的内容,并向您提出了一些问题:1) 您是否有不能使用
SimpleImputer的原因?它使用起来更简单,如果你取缺失值的平均值,它们永远不会是负数(除非你的输入包含负整数,但不太可能用于降雨数据)。 2) 你能说明babi_ana1的来源或数据的样子吗?我想知道data.iloc[:,:].values)是否符合预期。 -
嘿,谢谢你,Gabriel,我正在使用
IterativeImputer来填补一个地区所有雨站的缺失数据,所以该函数将获取每个站的信息并输入一个值,做几次(他们称为循环方式),直到它有一个不错的结果。我没有使用SimpleImputer,因为我想基于多元特征插补获得更好的结果。我将编辑问题以提供更详细的解释。
标签: python scikit-learn imputation