Python 错误:无法在没有频率的情况下向时间戳添加整数值



>我正在尝试计算两个日期之间的差值以获得两个日期之间的整数差(以天为单位)的数字,但我收到以下错误:"无法在没有频率的情况下向 Timestmp 添加整数值"。 这是代码:

from __future__ import print_function
try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None
import os
import datetime
import pandas_datareader.data as web
import numpy as np
import pandas as pd
def main():
    count = 0
    df = pd.DataFrame([])
    start = datetime.datetime(2017, 10, 11)
    end = datetime.datetime(2017, 10, 27)
    index_date = datetime.datetime(2017, 10, 11)
    symbols_list = ['ORCL', 'TSLA', 'IBM','YELP', 'MSFT']
    length = len(symbols_list)
    for num, ticker in enumerate(symbols_list, start=1):
        f = web.DataReader(ticker, 'yahoo', start, end)['Adj Close']
        f.ix[index_date]
        if count == 0:
            f = f.to_frame().reset_index()
            df = f
            df.columns = ['Date', ticker]
            length_df = len(df)
            sDate = df.iloc[:,-2]  # Date data list
            print ('sDate[0] is: ', (sDate[0]))
            j = 0
            while j < len(sDate[j] - 1):
                date_delta = timedelta(sDate[j] - index_date)
                j += 1

它在最后一行崩溃:

date_delta = timedelta(sDate[j] - index_reference_date)

错误消息是:"无法在没有频率的情况下向 Timestmp 添加整数值"。

我不明白问题是什么。数据类型包括:

sDate[0] is:     2017-10-06 00:00:00, and 
index_date is:   2017-10-11 00:00:00 
index_date type is:  <type 'datetime.datetime'>

但请注意:

sDate[0] type is:  <class 'pandas._libs.tslib.Timestamp'>

所以:也许问题就在这里? 感谢您的任何帮助!

此行存在键入错误:

while j < len(sDate[j] - 1):

sDate是一个日期数据列表,因此sDate[j]是一个日期(可能是pandas.tslib.Timestamp类型),它的长度没有意义。所以你可能想要这样的东西:

while j < len(sDate) - 1:

也许使用 for 循环更合适,例如:

for dat in sDate[:-1]:

编辑:然后你需要我写到第一个答案的想法。

重要的可能是差分sDate[j] - index_reference_date的类型以及如何将其传递给构造函数timedelta

我相信这可能是解决方案:

date_delta = timedelta(microseconds=(sDate[j] - index_reference_date).delta)

相关内容

最新更新