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.

  • Python - Alternative für die Verwendung von numpy Array als Schlüssel im Wörterbuch
  • Diskontinuierliche Zeiträume mit Datum auf der x-Achse
  • Wie kann ich die Histogramme von Graustufenbildern verwandeln, um ein bestimmtes Verhältnis von Highlights / Midtonen / Schatten zu erzwingen?
  • Wie mpf ein Array?
  • Save_npz Methode fehlt von scipy.sparse
  • Numpy Laden csv TOO langsam im Vergleich zu Matlab
  • Numpy Array Zuordnung mit Kopie
  • Wie man eine Pandas-Zeitreihe nach NAN-Werten aufteilt
  • 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.