Ich versuche, eine PostgreSQL-Tabelle von 30-Minuten-Daten für die S & P 500 ETF (spy30new, zum Testen frisch eingefügten Daten) aus einer Tabelle von mehreren zu erstellen Aktien mit 15-Minuten-Daten (alle15). all15 hat einen Index für 'dt' (Zeitstempel) und 'instr' (Aktiensymbol). Ich möchte, dass spion30new einen Index für "dt" hat.ValueError: kann DatetimeIndex nicht zu dtype datetime64 [us]
import numpy as np
import pandas as pd
from datetime import datetime, date, time, timedelta
from dateutil import parser
from sqlalchemy import create_engine
# Query all15
engine = create_engine('postgresql://user:[email protected]:5432/stocks')
new15Df = (pd.read_sql_query("SELECT dt, o, h, l, c, v FROM all15 WHERE (instr = 'SPY') AND (date(dt) BETWEEN '2016-06-27' AND '2016-07-15');", engine)).sort_values('dt')
# Correct for Time Zone.
new15Df['dt'] = (new15Df['dt'].copy()).apply(lambda d: d + timedelta(hours=-4))
# spy0030Df contains the 15-minute data at 00 & 30 minute time points
# spy1545Df contains the 15-minute data at 15 & 45 minute time points
spy0030Df = (new15Df[new15Df['dt'].apply(lambda d: d.minute % 30) == 0]).reset_index(drop=True)
spy1545Df = (new15Df[new15Df['dt'].apply(lambda d: d.minute % 30) == 15]).reset_index(drop=True)
high = pd.concat([spy1545Df['h'], spy0030Df['h']], axis=1).max(axis=1)
low = pd.concat([spy1545Df['l'], spy0030Df['l']], axis=1).min(axis=1)
volume = spy1545Df['v'] + spy0030Df['v']
# spy30Df assembled and pushed to PostgreSQL as table spy30new
spy30Df = pd.concat([spy0030Df['dt'], spy1545Df['o'], high, low, spy0030Df['c'], volume], ignore_index = True, axis=1)
spy30Df.columns = ['d', 'o', 'h', 'l', 'c', 'v']
spy30Df.set_index(['dt'], inplace=True)
spy30Df.to_sql('spy30new', engine, if_exists='append', index_label='dt')
Dies gibt den Fehler „Valueerror: Kann nicht DatetimeIndex werfen datetime64 dtype [us]“
Was bisher habe ich versucht habe (ich habe erfolgreich geschoben CSV-Dateien PG Pandas mit Aber hier ist die Quelle ist. eine PG-Datenbank):
einen Index für
'dt'
Nicht Platzierungspy30Df.set_index ([ 'dt'], Inplace = True) # diese Zeile entfernen spy30Df.to_sql ('spy30new', Motor, if_exists = 'append') # löschen index_label Option
'dt' vom Typ Konvertieren pandas.tslib.Timestamp zu datetime.datetime mit
to_pydatetime()
(bei psycopg2 kann mit python dt arbeiten, aber nicht Zeitstempel Pandas)u = (spy0030Df['dt']).tolist() timesAsPyDt = np.asarray(map((lambda d: d.to_pydatetime()), u)) spy30Df = pd.concat([spy1545Df['o'], high, low, spy0030Df['c'], volume], ignore_index = True, axis=1) newArray = np.c_[timesAsPyDt, spy30Df.values] colNames = ['dt', 'o', 'h', 'l', 'c', 'v'] newDf = pd.DataFrame(newArray, columns=colNames) newDf.set_index(['dt'], inplace=True) newDf.to_sql('spy30new', engine, if_exists='append', index_label='dt')
datetime.utcfromtimestamp()
timesAsDt = (spy0030Df['dt']).apply(lambda d: datetime.utcfromtimestamp(d.tolist()/1e9))
Verwendung
- Verwendung
pd.to_datetime()
timesAsDt = pd.to_datetime(spy0030Df['dt'])