Numpy - 更改已从pandas转换的数组的dtype

时间:2018-02-08 01:41:22

标签: python arrays numpy

我有一个pandas数据框,其价格数据如下所示:

                       open    high     low   close
timestamp                                          
2018-02-07 18:00:00  8341.0  8460.5  8255.0  8255.0
2018-02-07 19:00:00  8250.0  8270.0  8033.5  8179.0
2018-02-07 20:00:00  8183.0  8225.0  7972.5  8165.0

我的目标是将其转换为numpy数组,迭代行,并执行一些计算,其结果应存储在同一数组的其他列中。

我正在使用bars_pd.as_matrix()将数据帧转换为numpy数组,并且需要向数组添加几个不同类型的列(float,bool,int)。我现在遇到了麻烦。我转换的numpy数组看起来像这样:

[[ 11670.   11748.   11663.5  11744.5]
 [ 11740.5  11746.5  11637.5  11672.5]
 ... 
 [  8070.5   8085.5   7977.5   8002. ]]

我需要得到的是,例如:

[[ 11670.   11748.   11663.5  11744.5  0  False]
 [ 11740.5  11746.5  11637.5  11672.5  0  False]
 ... 
 [  8070.5   8085.5   7977.5   8002.  0  False]]

这样我就可以在循环中填充这些列进行计算。

我尝试了各种方法来改变astype和连接/插入正确形状的数组,但是无法使其工作。 连接不同类型的np数组给了我一个错误,改变astype改变了数组结构。

有人可以建议如何实现这个目标吗?

更新

我打算转换为numpy的原因是我需要比较每一行循环中的几个最后一个值。例如,使用for迭代pandas就像这样(我知道我不应该用于循环数据帧):

for i in range(0 + 6, size):  
    if ((bars['close'].iloc[i - 1] > bars['close'].iloc[i - 5]) 
    and (bars['close'].iloc[i] < bars['close'].iloc[i - 4])): 
        do_something

我无法用iterrows实现相同的功能,因为它只返回下一个项目。我应该将最后6个值存储在一个单独的数组中,然后在iterrows中不断重写它们吗?

感谢。

0 个答案:

没有答案