标签: imputation

R中的估算

我是R编程语言的新手.我只是想知道有没有办法在我们的数据集中只包含一列的空值.因为我看到的所有插补命令和库都会归因于整个数据集的空值.

r imputation

5
推荐指数
1
解决办法
2万
查看次数

Python - SkLearn Imputer用法

我有以下问题:我有一个pandas数据帧,其中缺少的值由字符串标记na.我想在它上面运行一个Imputer,用列中的平均值替换缺少的值.根据sklearn文档,参数missing_values应该帮助我:

missing_values:integer或"NaN",optional(default ="NaN")缺少值的占位符.所有出现的missing_values都将被估算.对于编码为np.nan的缺失值,请使用字符串值"NaN".

在我的理解中,这意味着,如果我写

df = pd.read_csv(filename)
imp = Imputer(missing_values='na')
imp.fit_transform(df)
Run Code Online (Sandbox Code Playgroud)

这意味着imputer用数据框的平均值替换数据框中的任何内容na.但是,我得到一个错误:

ValueError: could not convert string to float: na
Run Code Online (Sandbox Code Playgroud)

我误解了什么?这不是影像应该如何工作的吗?我怎样才能na用平均值替换字符串呢?我应该只使用lambda吗?

谢谢!

python scikit-learn imputation

5
推荐指数
1
解决办法
2084
查看次数

用零 python pandas 填充 nan

这是我的代码:

for col in df:
    if col.startswith('event'):
        df[col].fillna(0, inplace=True)
        df[col] = df[col].map(lambda x: re.sub("\D","",str(x)))
Run Code Online (Sandbox Code Playgroud)

我有 0 到 10 个事件列“event_0,event_1,...”当我用此代码填充 nan 时,它将所有事件列下的所有 nan 单元格填充为 0,但它不会更改 event_0,它是该选择的第一列,并且它也由nan填充。

我使用以下代码从“事件”列创建了这些列:

event_seperator = lambda x: pd.Series([i for i in 
str(x).strip().split('\n')]).add_prefix('event_')
df_events = df['events'].apply(event_seperator)
df = pd.concat([df.drop(columns=['events']), df_events], axis=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请告诉我出了什么问题?您可以在图片中看到更改之前的数据框。

python nan series pandas imputation

5
推荐指数
1
解决办法
1万
查看次数

svd 插补 R

我正在尝试使用 bcv 包中的 SVD 插补,但所有插补值都相同(按列)。

这是缺失数据的数据集 http://pastebin.com/YS9qaUPs

#load data
dataMiss = read.csv('dataMiss.csv')
#impute data
SVDimputation = round(impute.svd(dataMiss)$x, 2)
#find index of missing values
bool = apply(X = dataMiss, 2, is.na)
#put in a new data frame only the imputed value
SVDImpNA = mapply(function(x,y) x[y], as.data.frame(SVDimputation), as.data.frame(bool))
View(SVDImpNA)

head(SVDImpNA)
        V1   V2   V3
[1,] -0.01 0.01 0.01
[2,] -0.01 0.01 0.01
[3,] -0.01 0.01 0.01
[4,] -0.01 0.01 0.01
[5,] -0.01 0.01 0.01
[6,] -0.01 0.01 0.01
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

r svd imputation

4
推荐指数
1
解决办法
1485
查看次数

如何根据面板数据的客户 ID 使用 R 中的中值插补为所有列填充缺失值?

Customer id    Year     a      b
1              2000     10     2
1              2001     5      3
1              2002     NA     4
1              2003     NA     5
2              2000     2      NA
2              2001     NA     4  
2              2002     4      NA
2              2003     8      10
3              2000     9      NA 
3              2001     10     NA
3              2002     11     12
Run Code Online (Sandbox Code Playgroud)

r panel median imputation

4
推荐指数
1
解决办法
1963
查看次数

将缺失值估算为 0,并在 Pandas 中创建指标列

我在 Pandas 中有一个非常简单的数据框,

testdf = [{'name' : 'id1', 'W': np.NaN, 'L':   0, 'D':0},
          {'name' : 'id2', 'W':   0, 'L': np.NaN, 'D':0},
          {'name' : 'id3', 'W':  np.NaN, 'L':  10, 'D':0},
          {'name' : 'id4', 'W':  75, 'L':  20, 'D':0}
          ]
testdf = pd.DataFrame(testdf)
testdf = testdf[['name', 'W', 'L', 'D']]  
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

| name | W   | L   | D |
|------|-----|-----|---|
| id1  | NaN | 0   | 0 |
| id2  | 0   | NaN | 0 |
| id3  | NaN …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas imputation

4
推荐指数
1
解决办法
4594
查看次数

过度采样:使用SMOTE处理Python中的二进制和分类数据

我想将SMOTE应用于包含二进制,分类和连续数据的不平衡数据集。有没有一种方法可以将SMOTE应用于二进制和分类数据?

python-3.x imputation

4
推荐指数
2
解决办法
6313
查看次数

模拟数据并将缺失值随机添加到数据框中

如何在模拟数据帧中随机向某些列或每列添加缺失值(例如每列随机缺失约 5%),另外,是否有更有效的方法来模拟具有连续列和因子列的数据帧?

 #Simulate some data
 N <- 2000
 data <- data.frame(id = 1:2000,age = rnorm(N,18:90),bmi = rnorm(N,15:40),
     chol = rnorm(N,50:350), insulin = rnorm(N,2:40),sbp = rnorm(N, 50:200),
               dbp = rnorm(N, 30:150), sex = c(rep(1, 1000), rep(2, 1000)), 
               smoke = rep(c(1, 2), 1000), educ = sample(LETTERS[1:4]))


 #Manually add some missing values
 data <- data %>%
                    mutate(age = "is.na<-"(age, age <19 | age >88),
                    bmi = "is.na<-"(bmi, bmi >38 | bmi <16),
                    insulin = "is.na<-"(insulin, insulin >38),
                    educ = "is.na<-"(educ, bmi >35))
Run Code Online (Sandbox Code Playgroud)

simulation r data-manipulation missing-data imputation

4
推荐指数
1
解决办法
4262
查看次数

Pyspark 在列级别内向前和向后填充

我尝试填充 pyspark 数据框中缺失的数据。pyspark 数据框如下所示:

+---------+---------+-------------------+----+
| latitude|longitude|      timestamplast|name|
+---------+---------+-------------------+----+
|         | 4.905615|2019-08-01 00:00:00|   1|
|51.819645|         |2019-08-01 00:00:00|   1|
| 51.81964| 4.961713|2019-08-01 00:00:00|   2|
|         |         |2019-08-01 00:00:00|   3|
| 51.82918| 4.911187|                   |   3|
| 51.82385| 4.901488|2019-08-01 00:00:03|   5|
+---------+---------+-------------------+----+
Run Code Online (Sandbox Code Playgroud)

在“名称”列中,我想要向前填充或向后填充(以必要者为准)以仅填充“纬度”和“经度”(不应填充“timestamplast”)。我该怎么做呢?

输出将是:

+---------+---------+-------------------+----+
| latitude|longitude|      timestamplast|name|
+---------+---------+-------------------+----+
|51.819645| 4.905615|2019-08-01 00:00:00|   1|
|51.819645| 4.905615|2019-08-01 00:00:00|   1|
| 51.81964| 4.961713|2019-08-01 00:00:00|   2|
| 51.82918| 4.911187|2019-08-01 00:00:00|   3|
| 51.82918| 4.911187|                   |   3|
| 51.82385| 4.901488|2019-08-01 00:00:03|   5|
+---------+---------+-------------------+----+
Run Code Online (Sandbox Code Playgroud)

在 Pandas 中,这将这样做:

df = …
Run Code Online (Sandbox Code Playgroud)

pyspark imputation

4
推荐指数
1
解决办法
7860
查看次数

在 sklearn 管道中对分类变量实施 KNN 插补

我正在使用 sklearn 的管道转换器实现预处理管道。我的管道包括 sklearn 的 KNNImputer 估计器,我想用它来估算数据集中的分类特征。(我的问题类似于这个线程,但它不包含我的问题的答案:How to implement KNN to impute categorical features in a sklearn pipeline

我知道分类特征必须在插补之前编码,这就是我遇到麻烦的地方。使用标准标签/序数/onehot 编码器,当尝试使用缺失值 (np.nan) 对分类特征进行编码时,您会收到以下错误:

ValueError: Input contains NaN
Run Code Online (Sandbox Code Playgroud)

我设法通过创建一个自定义编码器来“绕过”它,我将 np.nan 替换为“Missing”:

class CustomEncoder(BaseEstimator, TransformerMixin):
    def __init__(self):
        self.encoder = None

    def fit(self, X, y=None):
        self.encoder = OrdinalEncoder()
        return self.encoder.fit(X.fillna('Missing'))

    def transform(self, X, y=None):
        return self.encoder.transform(X.fillna('Missing'))

    def fit_transform(self, X, y=None, **fit_params):
        self.encoder = OrdinalEncoder()
        return self.encoder.fit_transform(X.fillna('Missing'))

preprocessor = ColumnTransformer([
    ('categoricals', CustomEncoder(), cat_features),
    ('numericals', StandardScaler(), num_features)],
    remainder='passthrough'
)

pipeline = Pipeline([
    ('preprocessing', preprocessor), …
Run Code Online (Sandbox Code Playgroud)

python encoding pipeline scikit-learn imputation

4
推荐指数
1
解决办法
2838
查看次数