簡體   English   中英

時區感知熊貓DateTimeIndex的性能

[英]Performance of timezone-aware Pandas DateTimeIndex

我在網上搜索,但對遇到的問題一無所獲。

似乎具有時區感知日期的索引上的pandas.DataFrame操作要比常規日期時間慢幾個數量級。

這是ipython的時間。

首先使用標准日期時間:

import pandas as pd
import numpy as np

dates=pd.date_range('2010/01/01 00:00:00', '2010/12/31 00:00:00', freq='1T')
DF=pd.DataFrame(data=np.random.rand(len(dates)), index=dates, columns=["value"])

# compute timedeltas between dates
%timeit DF["temp"] = DF.index
%timeit DF["deltas"] = (DF["temp"] - DF["temp"].shift())

結果是:

1000 loops, best of 3: 1.13 ms per loop
100 loops, best of 3: 17.1 ms per loop

到現在為止還挺好。

現在只添加時區信息:

import pandas as pd
import numpy as np

dates=pd.date_range('2010/01/01 00:00:00', '2010/12/31 00:00:00', freq='1T')
# NEW: filter dates to avoid DST problems
dates=dates[dates.hour>2] # to avoid AmbiguousInferError or NonExistentDateError

DF=pd.DataFrame(data=np.random.rand(len(dates)), index=dates, columns=["value"])

# NEW: add timezone info
DF.index = DF.index.tz_localize(tz="America/New_York", ambiguous="infer")

# compute timedeltas between dates
%timeit DF["temp"] = DF.index
%timeit DF["deltas"] = (DF["temp"] - DF["temp"].shift())

現在,結果是:

1 loops, best of 3: 5.43 s per loop
1 loops, best of 3: 16 s per loop

這是為什么 ??
我真的不明白這里的瓶頸在哪里...

有關信息(來自conda list ):

anaconda                  2.2.0                np19py34_0  
conda                     3.12.0                   py34_0  

numpy                     1.9.2                    py34_0  
pandas                    0.16.1               np19py34_0  
pytz                      2015.4                   py34_0  
scipy                     0.15.1               np19py34_0  

這是一個已知問題,請參見此處 與幼稚TZ日期時間(例如NO時區) Series被有效地用的D型細胞表示datetime64[ns] 使用int64的計算非常快。 tz感知Series使用object dtype表示。 這些計算要慢得多。

可以解決此問題(請參閱參考問題),以擁有統一的tz感知Series 歡迎提出請求!

In [9]: df = DataFrame({'datetime' : pd.date_range('20130101',periods=5), 'datetime_with_tz' : pd.date_range('20130101',periods=5,tz='US/Eastern')})

In [10]: df 
Out[10]: 
    datetime           datetime_with_tz
0 2013-01-01  2013-01-01 00:00:00-05:00
1 2013-01-02  2013-01-02 00:00:00-05:00
2 2013-01-03  2013-01-03 00:00:00-05:00
3 2013-01-04  2013-01-04 00:00:00-05:00
4 2013-01-05  2013-01-05 00:00:00-05:00

In [11]: df.dtypes
Out[11]: 
datetime            datetime64[ns]
datetime_with_tz            object
dtype: object

暫無
暫無

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

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