Ich möchte eine Liste von Daten erstellen, beginnend mit heute, und eine beliebige Anzahl von Tagen zurückgehen, beispielsweise in meinem Beispiel 100 Tage. Gibt es einen besseren Weg als diesen?
import datetime
a = datetime.datetime.today()
numdays = 100
dateList = []
for x in range (0, numdays):
dateList.append(a - datetime.timedelta(days = x))
print dateList
range(0, numdays)
in diesem Fall verwenden?datetimes = [start + timedelta(seconds=x*60+randint(-30, 30)) for x in range (0, range_end*5, 5)]
wo die Variablerange_end = 10
Pandas
eignet sich hervorragend für Zeitreihen im Allgemeinen und bietet direkte Unterstützung für Datumsbereiche.Zum Beispiel
pd.date_range()
:Es hat auch viele Möglichkeiten, um das Leben leichter zu machen. Wenn Sie zum Beispiel nur Wochentage wollten, würden Sie einfach eintauschen
bdate_range
.Siehe Dokumentation zum Datumsbereich
Darüber hinaus unterstützt es Pytz-Zeitzonen vollständig und kann die Sommer- / Herbst-Sommerzeitverschiebungen reibungslos überbrücken.
EDIT von OP:
Wenn Sie im Gegensatz zu Pandas Zeitstempeln tatsächliche Python-Daten benötigen:
Dies verwendet den Parameter "end", um mit der ursprünglichen Frage übereinzustimmen, aber wenn Sie absteigende Daten wünschen:
quelle
list(map(pd.Timestamp.to_pydatetime, datelist))
den Datetime-Typ zurückerhalten ...pandas.datetime
Klasse ist veraltet und wird in einer zukünftigen Version von Pandas entfernt.datetime
Stattdessen aus dem Modul importieren.Abrufen des Datumsbereichs zwischen dem angegebenen Start- und Enddatum (optimiert für zeitliche und räumliche Komplexität):
quelle
(end-start+1)
funktioniert nicht, Sie können kein Timedelta und Int hinzufügen. Sie könnten aber verwenden(end-start).days + 1
.Sie können eine Generatorfunktion schreiben, die ab heute Datumsobjekte zurückgibt:
Dieser Generator gibt Daten ab heute zurück und geht einen Tag nach dem anderen zurück. So nehmen Sie die ersten 3 Termine:
Der Vorteil dieses Ansatzes gegenüber einer Schleife oder einem Listenverständnis besteht darin, dass Sie so oft zurückgehen können, wie Sie möchten.
Bearbeiten
Eine kompaktere Version, die einen Generatorausdruck anstelle einer Funktion verwendet:
Verwendungszweck:
quelle
Ja, erfinde das Rad neu ... suche einfach im Forum und du bekommst so etwas:
quelle
dateutil.rrule
implementiert iCalendar RFC - es ist einfacher, Funktionen mit einem genau definierten Verhalten zu verwenden, als mehrere Implementierungen mit fast derselben Funktionalität, die sich geringfügig unterscheiden.dateutil.rrule
Ermöglicht die Begrenzung der Fehlerbehebung auf einen einzigen Ort.rrule
Name ist nicht willkürlich; es ist aus dem entsprechenden rfcSie können auch die Tagesordnung verwenden, um es einfacher zu machen:
Oder wie in den Kommentaren vorgeschlagen, können Sie eine Liste wie folgt erstellen:
quelle
Aus dem Titel dieser Frage hatte ich erwartet, etwas zu finden
range()
, mit dem ich zwei Daten angeben und eine Liste mit allen dazwischen liegenden Daten erstellen könnte. Auf diese Weise muss man die Anzahl der Tage zwischen diesen beiden Daten nicht berechnen, wenn man es vorher nicht weiß.Mit dem Risiko, etwas vom Thema abzukommen, erledigt dieser Einzeiler die Aufgabe:
Alle Credits zu dieser Antwort !
quelle
Hier ist eine etwas andere Antwort, die auf der Antwort von S.Lott aufbaut und eine Liste von Daten zwischen zwei Daten
start
und enthältend
. Im folgenden Beispiel von Anfang 2017 bis heute.quelle
Eine etwas späte Antwort, die ich kenne, aber ich hatte nur das gleiche Problem und entschied, dass Pythons interne Bereichsfunktion in dieser Hinsicht etwas fehlte, also habe ich sie in einem meiner Util-Module überschrieben.
quelle
output = []
und die Zeilen in derwhile cmp(...)
Schleife tauschen . Vergleicherange(0,10,1)
und_range(0,10,1)
.date_range
.Basierend auf Antworten habe ich mir folgendes geschrieben:
Ausgabe:
Der Unterschied ist, dass ich das
date
Objekt bekomme , nicht dasdatetime.datetime
.quelle
Wenn es zwei Daten gibt und Sie den Bereich benötigen, versuchen Sie es
quelle
Hier ist das Wesentliche, das ich aus meinem eigenen Code erstellt habe. Dies könnte helfen. (Ich weiß, dass die Frage zu alt ist, aber andere können sie verwenden)
https://gist.github.com/2287345
(das Gleiche unten)
quelle
Hier ist ein Einzeiler für Bash-Skripte, um eine Liste der Wochentage zu erhalten. Dies ist Python 3. Das Int am Ende ist die Anzahl der Tage in der Vergangenheit, die Sie möchten.
Hier ist eine Variante, um ein Start- (oder besser End-) Datum anzugeben
Hier ist eine Variante für beliebige Start- und Enddaten. nicht, dass dies nicht besonders effizient ist, aber es ist gut, um eine for-Schleife in ein Bash-Skript einzufügen:
quelle
Matplotlib verwandt
quelle
Ich weiß, dass dies beantwortet wurde, aber ich werde meine Antwort für historische Zwecke aufschreiben, und da ich denke, dass es einfach ist.
Sicher, es wird nichts wie Code-Golf gewinnen, aber ich finde es elegant.
quelle
arange
mit den Schritten ist ganz nett,listOfDates
besteht aber aus numpy datetime64 anstelle von python nativen datetimes.np.arange(…).astype(dt.datetime)
, umarange
native Python datetime anstelle von numpy datetime64 zurückzugeben.Ein weiteres Beispiel, das ausgehend von Sandeeps Antwort vorwärts oder rückwärts zählt.
gibt
und
gibt
Beachten Sie, dass das Startdatum in der Rücksendung enthalten ist. Wenn Sie also vier Gesamtdaten möchten, verwenden Sie
timedelta(days=3)
quelle
quelle
Ein monatlicher Datumsbereichsgenerator mit
datetime
unddateutil
. Einfach und leicht zu verstehen:quelle
quelle
end
sollte das seinbase - datetime.timedelta
. Außerdem ... Warum ist diese Lösung besser als die ursprüngliche?Aus den obigen Antworten habe ich dieses Beispiel für den Datumsgenerator erstellt
quelle