Wie komme ich um die Zeitspalte zu der nächsten Viertelstunde

Ich habe eine Datendatei in ein Python pandas dataframe geladen. Ich habe eine datetime Spalte des Formats 2015-07-18 13:53:33.280 .

Was ich tun muss, ist eine neue Spalte zu erstellen, die diese auf ihre nächste Viertelstunde abrundet. So wird das oben genannte Datum auf 2015-07-18 13:45:00.000 .

  • Wie benutzt man Emacs mit Python
  • Wie benutzt man Schemata in Django?
  • Pyqt: Wie dynamisch aktualisieren widget Eigenschaft auf äußere variable Wert ändern?
  • Unterbrechung von Zeilenumbruch auf file.write
  • Was ist diese "und" Aussage tatsächlich in der Rückkehr?
  • Python NLTK pos_tag nicht die korrekte Part-of-Speech-Tag zurückgeben
  • Wie mache ich das in Pandas? Ich habe versucht, die Lösung von hier aus , aber bekomme ein 'Series' object has no attribute 'year' Fehler.

    4 Solutions collect form web for “Wie komme ich um die Zeitspalte zu der nächsten Viertelstunde”

    Angenommen, dass Ihre Serie aus datetime Objekten besteht, müssen Sie Series.apply . Beispiel –

     import datetime df['<column>'] = df['<column>'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour,15*(dt.minute // 15))) 

    Jetzt können Sie round(freq) Methode für DatetimeIndex eingeführt in pandas 0.18.0 verwenden.

    Hier ist Ein-Liner:

     pd.DatetimeIndex(df['old column']).round('15min') 

    String Aliase für gültige Frequenzen finden Sie hier . Vollarbeitsbeispiel:

     In [1]: import pandas as pd In [2]: df = pd.DataFrame([pd.Timestamp('2015-07-18 13:53:33.280'), pd.Timestamp('2015-07-18 13:33:33.330')], columns=['old column']) In [3]: df['new column']=pd.DatetimeIndex(df['old column']).round('15min') In [4]: df Out[4]: old column new column 0 2015-07-18 13:53:33.280 2015-07-18 14:00:00 1 2015-07-18 13:33:33.330 2015-07-18 13:30:00 

    Das sieht ein wenig schöner aus

    column.dt. Erlaubt die datetime-Funktionen für datetime-Spalten, wie column.str. Tut für stringartige Spalten

    Datetime-like Eigenschaften API-Referenz

     import pandas as pd # test df df = pd.DataFrame([{'old_column':pd.Timestamp('2015-07-18 13:53:33.280')}]) df['new_column'] = df['old_column'].dt.round('15min') df 

    Anand S Kumars Antwort ruft nicht auf die nächste Viertelstunde, es schneidet die Minuten auf die nächsten 15 Minuten darunter ab.

    Eigentlich in Ihrem Beispiel 2015-07-18 13:53:33.280 sollte bis 2015-07-18 14:00:00.000 seit 53:33.280 ist näher bei 60 Minuten als 45 Minuten.

    Ich fand eine robustere Antwort für die Rundung in diesem Beitrag .

    Für deine Situation sollte das funktionieren:

     import datetime def round_time(time, round_to): """roundTo is the number of minutes to round to""" rounded = time + datetime.timedelta(minutes=round_to/2.) rounded -= datetime.timedelta(minutes=rounded.minute % round_to, seconds=rounded.second, microseconds=rounded.microsecond) return rounded dt['dtcolumn'] = df['dtcolumn'].apply(lambda x: round_time(x)) 
    Python ist die beste Programmiersprache der Welt.