Skip to main content
 首页 » 编程设计

python之在 Python 中制作 pandas.DatetimeIndex 的有效方法

2025年05月04日14bonelee

我正在从数据库中下载 3000 多只股票的盘中 1 分钟价格。每条记录将包含三个部分:

(时间、符号、价格)

我想生成一个 pandas.DataFrame,其中行索引是时间,列索引是符号。我的策略是首先构建一个双索引系列,然后将其转换为 DataFrame。转换速度很快。但是,将时间(纪元时间)更改为 pandas.DatetimeIndex 非常非常慢,通常需要大约 15 分钟,因为我首先必须将时间转换为“2013-09-23T09:45:00”之类的字符串,然后使用 pandas.DatetimeIndex功能。

有更快的方法吗?

请您参考如下方法:

参见 docs

In [1]: stamps = [ Timestamp('20130101 09:01:01'),Timestamp('20130102 09:10:00') ] 
 
In [2]: stamps 
Out[2]:  
[Timestamp('2013-01-01 09:01:01', tz=None), 
 Timestamp('2013-01-02 09:10:00', tz=None)] 
 
In [6]: ms_epoch = [ int(s.value/1e6) for s in stamps ] 
 
In [7]: ms_epoch 
Out[7]: [1357030861000, 1357117800000] 

转换,指定unit='ms'为毫秒数

In [8]: pd.to_datetime(ms_epoch,unit='ms') 
Out[8]:  
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 09:01:01, 2013-01-02 09:10:00] 
Length: 2, Freq: None, Timezone: None 

高效转换 1M 邮票

In [21]: ms_epoch = np.repeat(base,int(1e7)) + np.arange(int(1e7)) 
 
In [22]: len(ms_epoch) 
Out[22]: 10000000 
 
In [26]: %timeit pd.to_datetime(ms_epoch,unit='ms') 
1 loops, best of 3: 1.04 s per loop 
 
In [27]: pd.to_datetime(ms_epoch,unit='ms')[0:5] 
Out[27]:  
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 09:00:01, ..., 2013-01-01 09:00:01.004000] 
Length: 5, Freq: None, Timezone: None 
 
In [28]: pd.to_datetime(ms_epoch,unit='ms')[-5:] 
Out[28]:  
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 11:46:40.995000, ..., 2013-01-01 11:46:40.999000] 
Length: 5, Freq: None, Timezone: None