na bardziej ogólnym zaokrąglenia, można skorzystać z faktu, że Pandy Timestamp
obiekty najczęściej korzystają z biblioteki standardowej datetime.datetime
API, w tym metody datetime.datetime.replace()
.
Tak więc, aby rozwiązać swój problem zaokrąglania mikrosekund, można zrobić:
import datetime
import pandas as pd
times = pd.date_range('2012-1-1 02:03:04.499',periods=3,freq='1ms')
# Add 5e5 microseconds and truncate to simulate rounding
times_rounded = [(x + datetime.timedelta(microseconds=5e5)).replace(microsecond=0) for x in times]
from IPython.display import display
print('Before:')
display(list(times))
print('After:')
display(list(times_rounded))
wyjściowa:
Before:
[Timestamp('2012-01-01 02:03:04.499000', offset='L'),
Timestamp('2012-01-01 02:03:04.500000', offset='L'),
Timestamp('2012-01-01 02:03:04.501000', offset='L')]
After:
[Timestamp('2012-01-01 02:03:04', offset='L'),
Timestamp('2012-01-01 02:03:05', offset='L'),
Timestamp('2012-01-01 02:03:05', offset='L')]
można użyć tej samej techniki, aby, na przykład, okrągłe do najbliższego dnia (jak o ile nie interesują Cię sekundy przestępne i podobne):
times = pd.date_range('2012-1-1 08:00:00', periods=3, freq='4H')
times_rounded = [(x + datetime.timedelta(hours=12)).replace(hour=0, second=0, microsecond=0) for x in times]
Zainspirowany tym słowem ost: https://stackoverflow.com/a/19718411/1410871
@hayden, zobacz moją edycję. Chcę tylko zaokrąglić do najbliższej sekundy. – Yariv
'date_range' domyślnie przyjmuje częstotliwość dzienną, zakładam że miałeś' pd.date_range ('2012-1-1 00: 00.000', okres = 2, freq = 'S') ' –
@MattiJohn, zobacz moją poprawkę. Miałem na myśli * ten sam * sekundę do powtórzenia. – Yariv