2013-03-04 46 views

Trả lời

60

DatetimeIndexndarray dưới mui xe, bạn có thể thực hiện chuyển đổi mà không cần hiểu (nhanh hơn nhiều).

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 
+0

Tôi đã bực mình vì tôi không thể nhớ làm thế nào để truy cập vào mảng này, tất nhiên đó là '.as_type (int64)' :) –

+0

@AndyHayden - thường thì đó là cách khác :) – root

27

Lưu ý: Dấu thời gian chỉ là unix thời gian với nano giây (để chia nó cho 10 ** 9):

[t.value // 10 ** 9 for t in tsframe.index] 

Ví dụ:

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 

Vì @root chỉ ra rằng nhanh hơn để trích xuất mảng giá trị trực tiếp:

tsframe.index.astype(np.int64) // 10 ** 9 
+0

này là khá xấu hổ dễ ... (và tôi có thể thề tôi đã cố gắng t.value, hóa ra tôi chỉ cố gắng tsframe.index.value) –

+0

@ChristianGeier Nó chỉ dễ dàng khi bạn biết câu trả lời! Thật điên rồ khi 'tsframe.index.values' khác ... khó hiểu. –

Các vấn đề liên quan