簡體   English   中英

熊貓時間序列索引—重新

[英]Pandas time series indexing — re

我有一個按時間索引的熊貓數據框:

>>> dframe.head()
                     aw_FATFREEMASS raw aw_FATFREEMASS sym
TIMESTAMP
2011-12-08 23:13:23               139.3                  H
2011-12-08 23:12:18               139.2                  H
2011-12-08 22:31:53               139.2                  H
2011-12-09 07:08:50               138.2                  H
2011-12-10 21:36:20               137.6                  H

[5 rows x 2 columns]

>>> type(dframe.index)
<class 'pandas.tseries.index.DatetimeIndex'>

我正在嘗試執行類似於以下SQL的簡單時間序列查詢:

SELECT * FROM dframe WHERE tstart <= TIMESTAMP <= tend

其中tstart和tend被適當地表示為時間戳。 有了熊貓,我的行為我只是不明白。

這符合我的期望:

>>> dframe['2011-11-01' : '2011-11-20']
Empty DataFrame
Columns: [aw_FATFREEMASS raw, aw_FATFREEMASS sym]
Index: []
[0 rows x 2 columns]

這做同樣的事情:

dframe['2011-11-01 00:00:00' : '2011-11-20 00:00:00']

然而:

>>> from dateutil.parser import parse
>>> dframe[parse('2011-11-01 00:00:00') : '2011-11-20 00:00:00']
*** TypeError: 'datetime.datetime' object is not iterable
>>> dframe[parse('2011-11-01') : '2011-11-20 00:00:00']
*** TypeError: 'datetime.datetime' object is not iterable
>>> dframe[parse('2011-11-01') : parse('2011-11-01')]
*** KeyError: Timestamp('2011-11-01 00:00:00', tz=None)

當我提供以熊貓時間戳記表示的時間時,我得到了我不理解的切片行為。 有人可以解釋這種行為和/或告訴我如何實現上述SQL查詢嗎?

文檔在這里

這稱為部分字符串索引。 簡而言之,提供一個字符串將使您獲得與結果“匹配”的結果,例如,它們包含在指定的時間間隔中,而如果您指定了時間戳/日期時間,則其精確; 它必須在索引中。

您能說明如何構造DatetimeIndex嗎?

什么版本的熊貓?

In [4]: df = DataFrame(np.random.randn(20,2),index=date_range('20130101',periods=20,freq='H'))

In [5]: df
Out[5]: 
                            0         1
2013-01-01 00:00:00 -0.339751  1.223660
2013-01-01 01:00:00  0.525203 -0.987815
2013-01-01 02:00:00  1.724239  0.213446
2013-01-01 03:00:00 -0.074797 -1.658876
2013-01-01 04:00:00  0.483425 -2.112314
2013-01-01 05:00:00  0.094140  0.327681
2013-01-01 06:00:00 -1.265337 -0.858521
2013-01-01 07:00:00 -1.470041  0.168871
2013-01-01 08:00:00 -0.609185  0.829035
2013-01-01 09:00:00  0.047774  0.221399
2013-01-01 10:00:00  0.814162 -1.415824
2013-01-01 11:00:00  1.070209  0.720150
2013-01-01 12:00:00  0.887571 -0.611207
2013-01-01 13:00:00  1.669451 -0.022434
2013-01-01 14:00:00 -1.796565 -1.186899
2013-01-01 15:00:00  0.417758  0.082021
2013-01-01 16:00:00 -1.064019 -0.377208
2013-01-01 17:00:00  0.939902  0.430784
2013-01-01 18:00:00 -0.645667  1.611992
2013-01-01 19:00:00 -0.172148 -1.725041

[20 rows x 2 columns]

In [6]: df['20130101 7:00:01':'20130101 10:00:00']
Out[6]: 
                            0         1
2013-01-01 08:00:00 -0.609185  0.829035
2013-01-01 09:00:00  0.047774  0.221399
2013-01-01 10:00:00  0.814162 -1.415824

[3 rows x 2 columns]

In [7]: df.index
Out[7]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00, ..., 2013-01-01 19:00:00]
Length: 20, Freq: H, Timezone: None

如果您已經有了時間戳/日期時間,則只需構造一個布爾表達式

df[(df.index > Timestamp('20130101 10:00:00')) & (df.index < Timestamp('201301010 17:00:00')])

暫無
暫無

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

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