[英]Convert pandas timezone-aware DateTimeIndex to naive timestamp, but in certain timezone
[英]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.