[英]Round up a Pandas Timestamp
我有一份Pandas時間戳列表。 它應該是15分鍾的分離,但由於測量中的一些錯誤,可能會在幾分鍾內出現錯誤。
我想將時間戳向上舍入到最接近的15分鍾。
我知道我可以使用pandas中的Timestamp.round()
來舍入時間戳。 但它的問題是它最接近15分鍾。 我總是想要接下來的15分鍾。
例如,
如果我有一個如下所示的時間戳,
ts = pd.Timestamp('2017-12-31 23:50:00+0530')
rounded = ts.round(freq='15T')
我得到的結果是Timestamp('2017-12-31 23:45:00+0530', tz='pytz.FixedOffset(330)')
。
我不希望這種情況發生,我希望結果是接下來的15分鍾時間戳,即它必須是
Timestamp('2018-01-01 00:00:00+0530', tz='pytz.FixedOffset(330)')
同時,我將有表格的時間戳
Timestamp('2018-01-01 00:00:00+0530', tz='pytz.FixedOffset(330)')
如果我使用Timestamp.ceil
作為我的目的,我會得到這樣的輸出
Timestamp('2018-01-01 00:15:00+0530', tz='pytz.FixedOffset(330)')
我不希望它發生。
輸出必須是
Timestamp('2018-01-01 00:00:00+0530', tz='pytz.FixedOffset(330)')
簡而言之,如果時間戳是正確的,則不必進行任何限制,如果時間戳不是15分鍾,則必須進行封鎖。
我怎么能用熊貓輕松做到這一點。
你想要ceil
,而不是round
:
ts.ceil(freq='15T')
Timestamp('2018-01-01 00:00:00+0530', tz='pytz.FixedOffset(330)')
我認為需要if-else
:
ts = pd.Timestamp('2018-01-01 00:00:00+0530')
print (ts.ceil(freq='15T') if ts.strftime('%H:%M:%S') != '00:00:00'
else ts)
2018-01-01 00:00:00+05:30
from datetime import time
print (ts.ceil(freq='15T') if ts.time() != time(0,0,0) else ts)
2018-01-01 00:00:00+05:30
@jazrael發布的解決方案很棒,它適用於基礎案例。 這也很好,所以我可以通過提供每小時15分鍾時間戳的列表來擴展我想要的每一個小時。 它需要列出一個96元素,並在下面顯示的代碼中檢查它。
from datetime import time
ts = pd.Timestamp('2018-01-01 00:00:00+0530')
print (ts.ceil(freq='15T') if ts.strftime('%H:%M:%S') != [list of 15 mints timestamps]
else ts)
我生成了所需小時的列表,並像這樣處理了檢查。
from datetime import time, timedelta
import numpy
ts = pd.Timestamp('2018-01-01 12:15:00')
print(ts.ceil(freq='15T') if ts.strftime('%H:%M:%S') not in [x.strftime('%H:%M:%S') for x in pd.date_range(start=pd.Timestamp('2018-01-01 00:00:00'), end=pd.Timestamp('2018-01-01 23:45:00'), freq='15T')]
else ts)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.