我在网上搜索,但没有找到我所面临的问题。在
看来熊猫.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())
结果是:
^{pr2}$到目前为止,还不错。在
现在只需添加时区信息:
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
这是一个已知问题,请参见here。 带有naivetz(例如没有时区)
Series
的日期时间用datetime64[ns]
的数据类型有效地表示。使用int64的计算非常快。tz感知Series
使用object
数据类型表示。这些计算比较慢。在有可能解决这个问题(请参阅参考问题),使其具有统一的tz-aware
Series
。欢迎拉请求!在相关问题 更多 >
编程相关推荐