簡體   English   中英

如何按時間對pandas時間序列進行子集化

[英]How to subset pandas time series by time of day

我正在嘗試按時間跨越多天的大熊貓時間序列。 例如,我只想要在12:00到13:00之間的時間。

我知道如何在特定日期執行此操作,例如,

In [44]: type(test)
Out[44]: pandas.core.frame.DataFrame

In [23]: test
Out[23]:
                           col1
timestamp
2012-01-14 11:59:56+00:00     3
2012-01-14 11:59:57+00:00     3
2012-01-14 11:59:58+00:00     3
2012-01-14 11:59:59+00:00     3
2012-01-14 12:00:00+00:00     3
2012-01-14 12:00:01+00:00     3
2012-01-14 12:00:02+00:00     3

In [30]: test['2012-01-14 12:00:00' : '2012-01-14 13:00']
Out[30]:
                           col1
timestamp 
2012-01-14 12:00:00+00:00     3
2012-01-14 12:00:01+00:00     3
2012-01-14 12:00:02+00:00     3

但是我在使用test.index.hourtest.index.indexer_between_time()任何日期都沒有這樣做,它們都被建議作為類似問題的答案。 我嘗試了以下方法:

In [44]: type(test)
Out[44]: pandas.core.frame.DataFrame

In [34]: test[(test.index.hour >= 12) & (test.index.hour < 13)]
Out[34]:
Empty DataFrame
Columns: [col1]
Index: []

In [36]: import datetime as dt
In [37]: test.index.indexer_between_time(dt.time(12),dt.time(13))
Out[37]: array([], dtype=int64)

對於第一種方法,我不知道test.index.hourtest.index.minute實際返回的是什么:

In [41]: test.index
Out[41]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-01-14 11:59:56, ..., 2012-01-14 12:00:02]
Length: 7, Freq: None, Timezone: tzlocal()

In [42]: test.index.hour
Out[42]: array([11, 23,  0,  0,  0,  0,  0], dtype=int32)

In [43]: test.index.minute
Out[43]: array([59, 50,  0,  0, 50, 50,  0], dtype=int32)

他們回來了什么? 如何進行所需的子集化? 理想情況下,我如何才能使上述兩種方法都起作用?

編輯:問題結果是索引無效,由上面的Timezone: tzlocal()證明,因為tzlocal()不應該被允許作為時區。 當我將生成索引的方法更改為pd.to_datetime() ,根據接受的答案的最后部分,一切都按預期工作。

假設索引是有效的pandas時間戳,以下內容將起作用:

test.index.hour返回一個數組,其中包含數據test.index.hour每行的小時數。 例如:

df = pd.DataFrame(randn(100000,1),columns=['A'],index=pd.date_range('20130101',periods=100000,freq='T'))

df.index.year返回array([2013, 2013, 2013, ..., 2013, 2013, 2013])

要獲取時間在12和1之間的所有行,請使用

df.between_time('12:00','13:00')

這將在幾天/幾年內獲取該時間幀等。如果索引不是有效時間戳,請使用pd.to_datetime()將其轉換為有效時間戳。

暫無
暫無

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

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