我已根据某些不同的群组将我的数据拆分为训练集,验证集和测试集。目的是这些集合将具有大致相同的不同类别的份额。
之后,我尝试扩展训练集中每列的数据,并对验证和测试集使用相同的转换。 由于我遍历训练集中的所有数字列,我想我可以同时对不同的组进行均值估算。因此,只遍历数字列(要素)一次。
下面用于按列扩展所有功能的工作代码:
for feature_name in numeric_columns:
tmp_feature_mean = train[feature_name].mean()
tmp_feature_std = train[feature_name].std()
train[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
val[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
test[feature_name].apply(lambda x: (x-tmp_feature_mean)/tmp_feature_std) # !Works
train[feature_name] = (train[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
val[feature_name] = (val[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
test[feature_name] = (test[feature_name]-tmp_feature_mean)/tmp_feature_std # Works
apply-versions似乎没有做任何事情。
现在我想做的是用该组的平均值替换NaNs。 我尝试了以下方法:
train_Scaled = train.groupby(['class', 'type'])
val_Scaled = val.groupby(['class', 'type'])
test_Scaled = test.groupby(['class', 'type'])
for feature_name in numeric_columns:
train_feature_mean = train_Scaled[feature_name].mean()
print "train_feature_mean: {}".format(train_feature_mean)
train_feature_std = train_Scaled[feature_name].std()
print "train_feature_std: {}".format(train_feature_std)
train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std # ValueError
val_Scaled[feature_name] = (val_Scaled[feature_name]-train_feature_mean)/train_feature_std
test_Scaled[feature_name] = (test_Scaled[feature_name]-train_feature_mean)/train_feature_std
for name, group in train_Scaled:
train_feature_group_mean = train_Scaled[feature_name].get_group(name).mean()
print train_feature_group_mean
train_feature_group_std = train_Scaled[feature_name].get_group(name).std()
print train_feature_group_std
因此,对于类和类型的每个组合,我想用该组合的均值填充NaN。在上面的代码中,我根本没有包含填充,因为我已经遇到了问题:
train_Scaled[feature_name] = (train_Scaled[feature_name]-train_feature_mean)/train_feature_std# Works
现在它失败了以前版本中的代码。差异可能与分组有关。
我还测试过首先通过组遍历并通过功能进行迭代。那样的话,我试着像这样填写NaN: train_Scaled [feature_name] .get_group(name).fillna(train_group_feature_mean)
但那没有做任何事情。但至关重要的是,还要在验证和测试集中使用训练集的组均值来填充NaN。
最后,我希望培训,验证和测试设置在" normal"没有任何分组的pandas数据帧。这是一个不好的方式到达那里? 我可以遍历每个类和类型的组合来完成它,但我更喜欢,如果group by可以利用部分迭代,因为我可能想要添加其他列以供稍后分组考虑。
我对蟒蛇和熊猫都很陌生,所以如果我发现一些完全错误的话,我并不感到惊讶。
答案 0 :(得分:0)
我实际上是用脏方式解决它,即只是循环遍历功能,类和类型(循环3)。
一旦我再次进入云端,我就会发布代码。