2016-04-20 8 views
0

Diese Frage bezieht: Python pandas, how to only plot a DataFrame that actually have the datapoint and leave the gap outNicht-konsekutive Intraday-Index

Ich mag den einfachste Weg, wissen, nicht-konsekutive DateTimeIndex auf Intraday-Auflösung zu erzeugen, das hält nur Proben zwischen bestimmten [Börse] mal z 08: 00-16: 30, und hat nur Wochentage, z.B. Mo-Fr. Ein Bonus wäre es, die Bereitstellung eines Kalenders mit gültigen Daten zu ermöglichen.

Im Tagesbereich ist es einfach mit pandas.bdate_range() für Mon-Fri zu tun. Was ich möchte ist etwas Analoges am Intraday, z.B. zweite Auflösung, aber nicht Samstag/Sonntag.

Der Punkt ist, in der Lage zu sein, aufeinanderfolgende Tage finanzieller Zeitreihen ohne "Lücken" zu zeichnen, während die Etiketten beibehalten werden. das heißt das:

with gaps in index

gegen die folgenden (beachten Sie, dass x Etiketten beibehalten werden, bei der zweiten Auflösung, obwohl nur Termine werden hier gezeigt - wenn Sie in der Zeit vergrößern wird sichtbar):

consecutive

Dies ist nicht die einzige Möglichkeit, dies zu erreichen; In den verknüpften Fragen finden Sie alternative Vorschläge (am einfachsten ist es wahrscheinlich, den Parameter use_index=False zu pandas.Series.plot() zu verwenden). Aber diese Frage bezieht sich auf die Erstellung eines nicht-konsekutiven DateTimeIndex; Ich frage nicht nach Alternativen Lösungen

+0

Wie wäre es mit dem Erstellen eines Intraday-Index und dem Entfernen von Samstagen und Sonntagen sowie von Nachtstunden danach? – IanS

+0

Ja, ich denke, das würde funktionieren. Wie viel Code wäre das? – Luciano

+0

Nur zwei Zeilen Code (siehe meine Antwort) :) – IanS

Antwort

1

Sie könnten einen vollständigen Intraday-Index erstellen und herausfiltern, Nächte und Wochenenden:

import pandas as pd 
index = pd.date_range('2016-01-01', '2016-01-16', freq='1min') 
index[(index.dayofweek <= 4) & (index.hour >= 8) & (index.hour <= 16)] 

Ausgang:

DatetimeIndex(['2016-01-01 08:00:00', '2016-01-01 08:01:00', 
       '2016-01-01 08:02:00', '2016-01-01 08:03:00', 
       '2016-01-01 08:04:00', '2016-01-01 08:05:00', 
       '2016-01-01 08:06:00', '2016-01-01 08:07:00', 
       '2016-01-01 08:08:00', '2016-01-01 08:09:00', 
       ... 
       '2016-01-15 16:50:00', '2016-01-15 16:51:00', 
       '2016-01-15 16:52:00', '2016-01-15 16:53:00', 
       '2016-01-15 16:54:00', '2016-01-15 16:55:00', 
       '2016-01-15 16:56:00', '2016-01-15 16:57:00', 
       '2016-01-15 16:58:00', '2016-01-15 16:59:00'], 
       dtype='datetime64[ns]', length=5940, freq=None) 

Sie einen Kalender enthalten könnten durch Hinzufügen einer Bedingung zu der Maske:

wo calendar wäre ein numpy Array von datetime Objekte.