无索引无法获取pandas数据帧输出

时间:2017-09-20 09:13:53

标签: python python-2.7 pandas numpy

signals是一个熊猫数据框,我存储买卖信号。使用getbuySignal函数,我可以确定生成买入信号的日期,并将这些日期存储在vector_buy数组中。然后使用get_close函数,我想获得每个“买入日”之前20天的收盘价(来自sh600004数据框)并将其存储在vector_close

我打印了vector_close以检查我的代码是否正确。但我的输出很奇怪。 if i<20函数中get_close部分的输出是一个仅包含close prices的数组。但else部分的输出包含close princedatetime index。就像在底部的图片中显示的那样。

vector_buy = []
vector_close = []
def get_buySignal():
    list_buy = []
    for i in range(0, len(signals.index)):
        global vector_buy
        if signals['positions'][i]==1.0:
            list_buy.append(i)
            vector_buy = np.array(list_buy)
def get_close():
    close_list = []
    for i in vector_buy:
        global vector_close
        if i < 20:
            close_list.append(sh600004['close'][range(0,i)])
            vector_close = np.array(close_list)
            print vector_close
        else:
            close_list.append(sh600004['close'][range(i-19,i)])
            vector_close = np.array(close_list)
            print vector_close   

get_buySignals()
get_close()

这是buy_vector

的输出
array([  10,   37,   47,   57,   82,   94,  102,  148,  165,  179,  188,
    201,  248,  260,  270,  272,  290,  299,  331,  350,  361,  373,
    409,  417,  435,  449,  457,  465,  491,  511,  527,  536,  555,
    571,  592,  609,  634,  661,  672,  706,  718,  735,  776,  794,
    807,  838,  854,  870,  890,  907,  915,  934,  969, 1004, 1013,
   1020, 1032, 1034, 1039, 1050, 1099, 1116, 1140, 1157, 1202, 1214,
   1228, 1238, 1257, 1276, 1297, 1311, 1319, 1347, 1376, 1379, 1389,
   1406, 1425, 1455, 1460, 1478, 1492, 1518, 1533, 1545, 1559, 1574,
   1590, 1615, 1627, 1657, 1683, 1692, 1704, 1731, 1742, 1758, 1775,
   1795, 1824, 1836, 1852, 1864, 1905, 1913, 1950, 1966, 1986, 1999,
   2005, 2020, 2046, 2079, 2088, 2108, 2113, 2124, 2145, 2154, 2166,
   2178, 2218, 2234, 2244, 2251, 2302, 2309, 2311, 2324, 2339, 2351,
   2372, 2387, 2397, 2408, 2422, 2446, 2462])

enter image description here

1 个答案:

答案 0 :(得分:0)

也许您可以优化代码并使用Pandas的强大功能来解决您的问题。如果我做对了,你想得到信号的所有信号,其中信号['position'] == 1。所以你不应该使用for-loop但是试试这个:

list_buy = signal[signal['positions'] == 1].index

在np.array中转换它很容易:

vector_buy = list_buy.as_matrix()

要获取vector_close中的最后20个条目,请尝试以下方法:

vector_close = sh600004['close'].tail(20)

vector_close = sh600004['close'].head(20)