Holen Sie sich das letzte Datum eines jeden Monats in einer Liste von Daten in Python

Ich benutze Python 2.7, PyCharm und Anaconda,

Ich habe eine list von Daten und ich möchte das letzte Datum eines jeden Monats im Array abrufen.

Gibt es irgendwelche Funktionen oder Bibliotheken, die mir helfen könnten, dies zu tun?

Ich lese die Daten aus einer CSV-Datei und habe sie als datetime gespeichert.

Ich habe den folgenden Code:

 Dates=[] Dates1=[] for date in dates: temp=xlrd.xldate_as_tuple(int(date),0) Dates1.append(datetime.datetime(temp[0],temp[1],temp[2])) for date in Dates1: if not (date<startDate or date>endDate): Dates.append(date) 

Um es klar zu machen, nehme ich an:

 Dates = [2015-01-20, 2015-01-15, 2015-01-17, 2015-02-21, 2015-02-06] 

(Betrachten Sie es im datetime Format.)

Die Liste, die ich gerne abrufen möchte, ist:

 [2015-01-20, 2015-02-21] 

Bisher habe ich mich geholt, vor allem im Stack Overflow, aber ich konnte nur Antworten finden, wie ich das letzte Datum jedes Monats bekommen konnte, aber nicht von einer benutzerdefinierten Liste.

  • Wie kann ich eine Gleitkommazahl knapp unterhalb einer Grenze klammern?
  • Delaunay Triangulation von Punkten von 2D Oberfläche in 3D mit Python?
  • Wie kann ich Blöcke in eine Blockdiagonalmatrix (NumPy)
  • Auf der Suche nach dem schnellsten Weg, um die genaue Überschneidung zwischen zwei Arrays von gleicher Länge in numpy zu finden
  • Füllen Sie 2D numpy Array aus drei 1D numpy Arrays
  • Interaktives Plotten mit Python über Kommandozeile
  • Zuordnung von Zeichencodierungen zu maximalen Bytes pro Zeichen
  • Lesen Sie die letzten N Zeilen einer CSV-Datei in Python mit Numpy / Pandas
  • 2 Solutions collect form web for “Holen Sie sich das letzte Datum eines jeden Monats in einer Liste von Daten in Python”

    Pandas können diese Aufgabe wirklich gut behandeln. Laden Sie Ihre CSV zu einem Dataframe, dann führen Sie eine Gruppe bis zum Monat und finden Sie das max Datum mit der aggregierten Funktion:

     import pandas as pd import numpy as np df = pd.read_csv('/path/to/file/') # Load a dataframe with your file df.index = df['my_date_field'] # set the dataframe index with your date dfg = df.groupby(pd.TimeGrouper(freq='M')) # group by month / alternatively use MS for Month Start / referencing the previously created object # Finally, find the max date in each month dfg.agg({'my_date_field': np.max}) # To specifically coerce the results of the groupby to a list: dfg.agg({'my_date_field': np.max})['my_date_field'].tolist() 

    Für Jahr y und Monat m , calendar.monthrange(y, m)[1] gibt die Tagesnummer des letzten Tages des Monats zurück.

    Das folgende Skript nimmt eine Liste von datetime Objekt, das als dates und macht eine neue Liste, month_last_dates , die datetime Objekte month_last_dates , die dem letzten Datum jedes Monats entsprechen, in dem die Mitglieder der dates fallen.

     import datetime import calendar tuples = [(2015, 8, 1), (2015, 9, 16), (2015, 10, 4)] dates = [datetime.datetime(y, m, d) for y, m, d in tuples] month_last_dates = len(dates) * [None] for i, date in enumerate(dates): y, m, d = date.year, date.month, date.day last = calendar.monthrange(y, m)[1] print y, m, last # Output for testing purposes. month_last_dates[i] = datetime.datetime(y, m, last) 

    Hier ist ein gleichwertiges Skript, das prägnanter mit Hilfe eines Listenverständnisses geschrieben wurde:

     import datetime import calendar tuples = [(2015, 8, 1), (2015, 9, 16), (2015, 10, 4)] dates = [datetime.datetime(y, m, d) for y, m, d in tuples] month_last_dates = [datetime.datetime(date.year, date.month, calendar.monthrange(date.year, date.month)[1]) for date in dates] # Output for testing purposes. for date in month_last_dates: print date.year, date.month, date.day 

    In Ihrem Fall, angesichts der Liste Dates , können Sie eine neue Liste wie Dates machen:

     last_dates = [datetime.datetime(date.year, date.month, calendar.monthrange(date.year, date.month)[1]) for date in Dates] 
    Python ist die beste Programmiersprache der Welt.