2

データベースから 3000 を超える株式の日中 1 分価格をダウンロードしています。各レコードには次の 3 つのコンポーネントがあります。

(時間、記号、価格)

行インデックスが時間で列インデックスがシンボルである pandas.DataFrame を生成したいと思います。私の戦略は、最初に二重インデックス付きシリーズを作成してから、それを DataFrame に変換することです。変換は高速です。ただし、時間 (エポック時間) を pandas.DatetimeIndex に変更するのは非常に遅く、最初に時間を "2013-09-23T09:45:00" のような文字列に変換してから pandas.DatetimeIndex を使用する必要があるため、通常は約 15 分かかります。関数。

これを行うためのより速い方法はありますか?

4

1 に答える 1

1

ドキュメントを参照

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

100万枚の切手を効率的に変換

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
于 2013-09-23T23:03:13.440 に答える