2017-11-07 2 views
0

nicht hinzufügen Ich versuche, den Unterschied zwischen zwei Daten zu berechnen, um eine Zahl zu erhalten, die eine Integer-Differenz (in Tagen) zwischen den beiden Daten ist, aber ich bekomme den folgenden Fehler: "Kann nicht addieren Sie Integralwert zu Timestmp ohne freq ". Hier ist der Code:Python-Fehler: kann Timestamp ohne Freq Integralwert

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 

Es stürzt in der letzten Zeile:

date_delta = timedelta(sDate[j] - index_reference_date) 

Die Fehlermeldung lautet: "nicht Integralwert TIMESTMP ohne Freq hinzufügen".

Ich kann nicht verstehen, was das Problem ist. Die Datentypen sind:

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'> 

Aber das beachten:

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

Also: Vielleicht ist das Problem hier? Danke für jede Hilfe!

Antwort

0

Die wichtige Sache kann die Art des Unterschieds sein sDate[j] - index_reference_date und wie man es an timedelta Erbauer übergibt.

Ich glaube, das die Lösung sein könnte:

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

Nun, das wirft diesen Fehler: "ValueError: Integralwert kann Timestamp ohne Freq nicht hinzugefügt werden". – Chas

0

Es ist ein Tippfehler auf dieser Linie:

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

sDate ist ein Datum, Datenliste, so sDate[j] wird ein Datum (wahrscheinlich von Geben Sie pandas.tslib.Timestamp) und seine Länge macht keinen Sinn. So möchten Sie wahrscheinlich so etwas wie:

while j < len(sDate) - 1: 

Vielleicht besser geeignet, es ist ein zu verwenden, für die Schleife, so etwas wie:

for dat in sDate[:-1]: 

Edit: und dann müssen Sie das denkt, dass ich an der ersten Antwort geschrieben.

+0

Ich habe die Änderungen vorgeschlagen und bekam: j = 0 während j Chas

+0

Lesen Sie sorgfältig meinen Freund. 'len (sDate) - 1' (was ich geschrieben habe) ist nicht dasselbe wie' len (sDate - 1) 'aus deinem Kommentar. – xhancar