2017-11-07 8 views
0

2つの日付間の差異を計算して、2つの日付間の整数の差異(日数)を取得しようとしましたが、次のエラーが表示されます。周波数なしでTimestmpに積分値を加算してください。ここでは、コードは次のとおりです。Pythonエラー:フリークエンシーなしでタイムスタンプに整数値を追加できません

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) 

エラーメッセージは次のとおりです。「FREQなし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: 

たぶんそれは、forループのようなものを使用する方が適切です。だからあなたは、おそらくのようなものが欲しいと、あなたは、私が最初の答えに書いたと思っ必要です。

+0

私は提案された変更を行い、得た: J = 0 jが Chas

+0

慎重に私の友人を読んでください。 'len(sDate) - 1'(これは私が書いたものです)はあなたのコメントの' len(sDate - 1) 'と同じではありません。 – xhancar

関連する問題