2017-11-07 9 views
0

두 날짜 간의 정수 차이 (일) 인 숫자를 얻기 위해 두 날짜의 차이를 계산하려고합니다. 다음과 같은 오류가 발생합니다. 주파수없이 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'> 

그래서 : 어쩌면 문제가 여기에있다? 어떤 도움을 주셔서 감사합니다!

답변

0

차이점의 유형은 sDate[j] - index_reference_date이며 timedelta 생성자로 전달하는 것이 좋습니다.

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

음, "ValueError : 주파수없이 타임 스탬프에 정수 값을 더할 수 없습니다."라는 오류가 발생합니다. – Chas

0

이 줄에 입력 오류가 있습니다 :

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

sDate 따라서, sDate[j] 날짜 데이터 목록은 (아마의 날짜입니다

나는이 해결책이 될 수 있으리라 생각합니다 pandas.tslib.Timestamp을 입력하십시오.) 길이가 맞지 않습니다.

for dat in sDate[:-1]: 

편집 :

while j < len(sDate) - 1: 

어쩌면 그것은, 루프 같은 것을을 사용하는 것이 더 적절한입니다 : 그래서 당신은 아마 같은 것을 원하고 당신은 내가 첫 번째 대답에 쓴 생각해야합니다.

+0

난 변경 제안했고 얻었다 : J를 = 0 동안 J Chas

+0

내 친구를주의 깊게 읽습니다. 'len (sDate) - 1' (내가 작성한 것)은 귀하의 코멘트에서'len (sDate - 1)'과 같지 않습니다. – xhancar