我是R编程语言的新手.我只是想知道有没有办法在我们的数据集中只包含一列的空值.因为我看到的所有插补命令和库都会归因于整个数据集的空值.
我有以下问题:我有一个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吗?
谢谢!
这是我的代码:
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)

请告诉我出了什么问题?您可以在图片中看到更改之前的数据框。
我正在尝试使用 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)
我哪里错了?
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) 我在 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) 我想将SMOTE应用于包含二进制,分类和连续数据的不平衡数据集。有没有一种方法可以将SMOTE应用于二进制和分类数据?
如何在模拟数据帧中随机向某些列或每列添加缺失值(例如每列随机缺失约 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) 我尝试填充 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) 我正在使用 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) imputation ×10
python ×4
r ×4
pandas ×2
scikit-learn ×2
dataframe ×1
encoding ×1
median ×1
missing-data ×1
nan ×1
panel ×1
pipeline ×1
pyspark ×1
python-3.x ×1
series ×1
simulation ×1
svd ×1