在异构数组上调用preprocessing.scale

时间:2017-10-18 15:18:30

标签: numpy scikit-learn

我有这个TypeError如下所示,我已经检查了我的df并且它只包含数字,这可能是在我转换为numpy数组时引起的吗?转换后,数组包含

之类的项目
[Timestamp('1993-02-11 00:00:00') 28.1216 28.3374 ...]

有任何建议如何解决这个问题,请?

df:           
    Date      Open      High       Low     Close     Volume  
9    1993-02-11   28.1216   28.3374   28.1216   28.2197      19500  
10   1993-02-12   28.1804   28.1804   28.0038   28.0038      42500  
11   1993-02-16   27.9253   27.9253   27.2581   27.2974     374800  
12   1993-02-17   27.2974   27.3366   27.1796   27.2777     210900  

X = np.array(df.drop(['High'], 1))
X = preprocessing.scale(X)

TypeError: float() argument must be a string or a number

1 个答案:

答案 0 :(得分:0)

虽然您说您的数据框" 都只包含数字"但您还注意到第一列包含日期时间对象。该错误告诉您preprocessing.scale只想使用浮点值。

然而,真正的问题是你期望发生的事情。 preprocessing.scale将均值置于均值上并对方差进行归一化。这使得测量的量全部表示在大致相同的基础上。现在,您的第一列会告诉您数据对应的日期,而其余列则是数字数据本身。你为什么要把日期标准化? 如何将日期标准化?

从语义上讲,我相信你应该单独留下你的日期。无论您计划对数值数据执行何种后处理,标准化数据仍应按原始日期进行参数化。如果您也想处理日期,则需要提出一种明确的方法来处理日期数字(例如elapsed time from a given date in given units)。

所以我相信你应该完全从你的处理轮次中删除你的日期,并从

开始
X = df.drop(['Date','High'], 1).as_matrix()