首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中将单个列拆分为多个子列/数组

在Python中将单个列拆分为多个子列/数组
EN

Stack Overflow用户
提问于 2018-02-23 21:41:37
回答 1查看 136关注 0票数 1

我试图在Python中实现一个决策树算法来预测丢失的输入数据。

假设我有一个有99个条目的专栏。在这99条条目中,有20条是NaN。我想将这个单个数组分解为x个大小为y(本例中为y=5)的子数组。

具有完整单元格的子数组被分配给特性,而包含NaN的子数组被分配给目标

代码语言:javascript
复制
 # breaking target array into subarrays
subarray_size = 5
target = []
features = []

# complete break up and assign to array "chunks"
chunks = [test[x : x + subarray_size] for x in xrange(0, len(test), subarray_size)]

# assigns NaN containg subarray to "target" and filled subarrays to "features"
for i in chunks:
    if (np.where(np.isnan(i)))[0].shape[0]: 
        target.append(i)
    else:
        features.append(i)

代码一直工作到for循环的末尾。现在我有了特性目标,我尝试了下面的代码块

代码语言:javascript
复制
from sklearn.cross_validation import train_test_split as tts

X_train, X_test, y_train, y_test = tts(features, target, test_size=0.2)

这导致了这个错误:

代码语言:javascript
复制
    202     if len(uniques) > 1:
    203         raise ValueError("Found input variables with inconsistent numbers of"
--> 204                          " samples: %r" % [int(l) for l in lengths])
    205 
    206 

ValueError: Found input variables with inconsistent numbers of samples: [5, 15]. 

我认为错误发生在数组操作的某个地方。我很难修好它。有什么建议/见解/建议吗?

编辑:下面是示例"test“列。不知道如何把它写成表格格式。很抱歉那些糟糕的视觉效果。

代码语言:javascript
复制
Site2_ThirdIonizationEnergy

39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
19.174
19.174
19.174
19.174
39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
39.722
39.722
33.667
39.722
39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
21.62
21.62
21.62
21.62
39.722
39.722
33.667
EN

Stack Overflow用户

发布于 2018-03-06 16:07:35

那么,看看test以及您创建featurestarget的方式,很明显,特性的数量和目标的数量是不同的。我想你可能对这两件事的含义感到困惑。

对于给定的记录,您将拥有一组描述该记录的特性和一个目标,表示您知道该记录在哪个类中。所以,如果你想预测谁会在泰坦尼克号上生存下来,你的特征可能是这样的:寄宿班、人的年龄、性别和目标是天气,他们是否幸存。

对于每个人,你需要他们的特征和他们的目标。然后,分类器将对特征和目标进行培训,以了解特征中的哪些模式与哪个目标相关联。然后,当您看到一个新的示例,其中您知道特性而不是目标时,predict方法将获取所学习的模式,并返回它对目标可能是什么(或者更确切地说,目标的每个可能值的概率)的最佳猜测。

目标不是你要填写的数据。这是已知的结果,例如,你可以用它来教算法如何猜测未知的值。在训练阶段,你必须告诉算法答案应该是什么。

你想要做的不是分类问题,而是试图“推断缺失的值”。这需要一种与您所尝试的完全不同的方法。

如果您的数据是一个时间序列(也就是说,每个值都是从某个时间点获取的,以便进行某种测量),那么您可以考虑使用移动平均值(ARMA或ARIMA)或“指数平滑”来计算丢失的值。

不过,根据您的目的,您也可能只需要取周围值的平均值,或者几个周围值的中值。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48956602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档