將pandas DateTimeIndex轉換爲(可迭代的)Unix時間的慣用方式是什麼? 這可能不是要走的路:將熊貓日期時間索引轉換爲Unix時間?
[time.mktime(t.timetuple()) for t in my_data_frame.index.to_pydatetime()]
將pandas DateTimeIndex轉換爲(可迭代的)Unix時間的慣用方式是什麼? 這可能不是要走的路:將熊貓日期時間索引轉換爲Unix時間?
[time.mktime(t.timetuple()) for t in my_data_frame.index.to_pydatetime()]
由於DatetimeIndex
是ndarray
在引擎蓋下,你可以做轉換沒有理解(更快)。
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: from datetime import datetime
In [4]: dates = [datetime(2012, 5, 1), datetime(2012, 5, 2), datetime(2012, 5, 3)]
...: index = pd.DatetimeIndex(dates)
...:
In [5]: index.astype(np.int64)
Out[5]: array([1335830400000000000, 1335916800000000000, 1336003200000000000],
dtype=int64)
In [6]: index.astype(np.int64) // 10**9
Out[6]: array([1335830400, 1335916800, 1336003200], dtype=int64)
%timeit [t.value // 10 ** 9 for t in index]
10000 loops, best of 3: 119 us per loop
%timeit index.astype(np.int64) // 10**9
100000 loops, best of 3: 18.4 us per loop
注:時間戳就是UNIX時間納秒(10 ** 9,從而將其劃分):
[t.value // 10 ** 9 for t in tsframe.index]
例如:
In [1]: t = pd.Timestamp('2000-02-11 00:00:00')
In [2]: t
Out[2]: <Timestamp: 2000-02-11 00:00:00>
In [3]: t.value
Out[3]: 950227200000000000L
In [4]: time.mktime(t.timetuple())
Out[4]: 950227200.0
作爲@root指出它的速度更快,以值的陣列直接提取:
tsframe.index.astype(np.int64) // 10 ** 9
這是很尷尬的容易...(我可以發誓,我試過t.value,原來我只嘗試tsframe.index.value) – 2013-03-04 14:43:02
@ChristianGeier這只是容易,當你知道答案! 'tsframe.index.values'是不同的......令人困惑。 – 2013-03-04 14:44:27
我很煩,我不記得如何作爲一個數組訪問它,當然它是'.as_type(int64)':) – 2013-03-04 14:58:43
@AndyHayden - 通常情況下它是相反的:) – root 2013-03-04 15:04:32