簡體   English   中英

圍繞一個熊貓時間戳

[英]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)
 import pandas as pd

    ts = pd.Timestamp('2017-12-31 23:50:00+0530')
    ceil = ts.ceil(freq='15T')
    print(ceil)

2018-01-01 00:00:00 + 05:30

Timestamp.ceil()返回一個新的時間戳,該時間戳通過此分辨率鏈接到此處

Timestamp.floor()返回一個覆蓋此分辨率的新時間戳, 鏈接在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM