【问题标题】:Can't get the pandas dataframe output without index无法获得没有索引的熊猫数据框输出
【发布时间】:2018-03-01 06:30:41
【问题描述】:

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

我打印了vector_close 来检查我的代码是否正确。但我得到了非常奇怪的输出。 get_close 函数中if i<20 部分的输出是一个仅包含close prices 的数组。但是else 部分的输出包含close prince 和datetime 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])

【问题讨论】:

  • 目前还不清楚问题是什么——那张截图到底显示了什么?它似乎至少打印了 2 件东西。你期望会发生什么?您的代码和您对它的用途的描述似乎也不一致 - 但一旦弄清楚实际问题是什么,就可以帮助解决这个问题。
  • 第一个打印输出是我从if i&lt;20 打印vector_close 时得到的。第二个打印输出是来自else 部分get_close 函数的输出。我想摆脱输出的日期时间索引。
  • 你能更新你的代码来展示你是如何打印这两个东西的吗?您当前的循环中只有一个打印语句。
  • 我更新了代码。

标签: python python-2.7 pandas numpy


【解决方案1】:

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

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)

【讨论】:

  • 感谢您的回复。这很有帮助。 signals 的索引是 pd.datetime 索引。所以vector buy 中的每个元素都是numpy.datetime64。我想计算每个元素之间有多少个工作日。我用了np.busday_count((datetime.datetime.strptime(vector_buy[0], '%Y/%m/%d')),(datetime.datetime.strptime(vector_buy[i], '%Y/%m/%d')))。但据说strptime 需要string 参数。我想知道你能帮我解决这个问题吗?
  • 我建议您熟悉 pandas.Datetimeindex:pandas.pydata.org/pandas-docs/stable/api.html#datetimeindex 我很确定您只能使用 pandas 来解决您的任务。所以坚持使用 pandas-methods 应该更舒服,而不是与 numpy 混合使用。
  • numpy. np.busday_count(list_buy[0].index.to_datetime(), list_buy[i].index.to_datetime()) 可能有效...
猜你喜欢
  • 2023-01-26
  • 1970-01-01
  • 2015-04-19
  • 2021-02-26
  • 1970-01-01
  • 2022-07-10
  • 2017-08-28
  • 2018-06-18
  • 2014-08-29
相关资源
最近更新 更多