2013-05-13 36 views
9

Ứng dụng của tôi liên quan đến việc xử lý dữ liệu (chứa trong một CSV) là các hình thức sau đây:Pandas: Sử dụng Unix kỷ nguyên dấu thời gian như chỉ số Datetime

Epoch (number of seconds since Jan 1, 1970), Value 
1368431149,20.3 
1368431150,21.4 
.. 

Hiện nay tôi đọc CSV sử dụng phương pháp loadtxt NumPy (có thể dễ dàng sử dụng read_csv từ Pandas). Hiện tại đối với loạt bài của tôi, tôi đang chuyển đổi trường dấu thời gian như sau:

timestamp_date=[datetime.datetime.fromtimestamp(timestamp_column[i]) for i in range(len(timestamp_column))] 

Tôi làm theo điều này bằng cách đặt timestamp_date làm chỉ mục thời gian cho DataFrame của tôi. Tôi đã thử tìm kiếm tại một số nơi để xem có cách nào nhanh hơn (sẵn có) bằng cách sử dụng các dấu thời gian thời gian của Unix, nhưng không thể tìm thấy bất kỳ. Rất nhiều ứng dụng sử dụng thuật ngữ dấu thời gian như vậy.

  1. Có phương pháp sẵn có để xử lý các định dạng dấu thời gian như vậy không?
  2. Nếu không, cách được khuyến nghị xử lý các định dạng này là gì?

Trả lời

15

Chuyển đổi họ datetime64[s]:

np.array([1368431149, 1368431150]).astype('datetime64[s]') 
# array([2013-05-13 07:45:49, 2013-05-13 07:45:50], dtype=datetime64[s]) 
+1

Wow! Không biết nó có thể dễ dàng như vậy! Phần tốt nhất là nó giữ lại cảm giác của một hoạt động vectơ. –

+3

N.B. https://github.com/pydata/pandas/issues/3540 –

12

Bạn cũng có thể sử dụng gấu trúc to_datetime:

df['datetime'] = pd.to_datetime(df["timestamp"], unit='s') 

Phương pháp này đòi hỏi Pandas 0,18 hoặc cao hơn.

1

Bạn cũng có thể sử dụng Pandas DatetimeIndex như vậy

pd.DatetimeIndex(df['timestamp']*10**9) 

các *10**9 đặt nó sang định dạng nó mong cho timestamps như vậy.

Điều này thật tuyệt vì nó cho phép bạn sử dụng các chức năng như .date() hoặc .tz_localize() trong chuỗi.

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