2014-11-12 17 views
7

Làm cách nào để đặt lại phần thời gian của dấu thời gian của một chú gấu trúc?Đặt lại phần thời gian của dấu thời gian của một chú gấu trúc

Tôi muốn đặt lại phần thời gian theo giá trị của gấu trúc.Timestamp.
Tôi đoán tôi có thể làm điều đó bằng quy trình sau.

  • bước 1) Timestamp để loại datetime
  • bước 2) datetime đến giây
  • bước 3) cắt ngắn thời gian tham gia vào giây
  • bước 4) mang lại giây để timestamp

Ngay cả khi đoán của tôi là chính xác, phải mất quá nhiều thời gian để làm. Có cách nào đơn giản để đạt được mục tiêu này không?

Trong [371]: ts = pd.Timestamp ('2014/11/12 13:35')

Trong [372]: ts

Out [372]: Timestamp (' 2014-11-12 13:35:00 ')

Trong [373]: ts.hour = 0 # < - đây là những gì tôi đang cố gắng làm.

+0

Nếu bạn đang xử lý '' DatetimeIndex'', bạn có thể sử dụng phương thức 'normalize'. Tuy nhiên, điều này không có sẵn trên Timestamp riêng lẻ (giải pháp thay thế là: 'pd.DatetimeIndex ([ts]). Normalize() [0]') – joris

+0

Bạn có muốn đặt lại phần thời gian 'toàn bộ' (chỉ giữ ngày), hoặc bạn chỉ muốn đặt lại giờ? – joris

+0

toàn bộ các phần thời gian. – Hill

Trả lời

14

Tôi nghĩ rằng bạn đang tìm kiếm phương pháp replace (xem docs):

In [18]: ts 
Out[18]: Timestamp('2014-11-12 13:35:00') 

In [19]: ts.replace(hour=0) 
Out[19]: Timestamp('2014-11-12 00:35:00') 

Đây là một phương pháp được thừa kế từ datetime.datetime

Nếu bạn muốn thiết lập lại toàn bộ thời gian một phần, bạn chỉ định tất cả các phần trong replace:

In [20]: ts.replace(hour=0, minute=0, second=0) 
Out[20]: Timestamp('2014-11-12 00:00:00') 

Ngoài ra còn có một phương pháp DatetimeIndex.normalize, nhưng điều này là không có sẵn trên Timestamps cá nhân (Tôi mở một vấn đề cho rằng: https://github.com/pydata/pandas/issues/8794):

In [21]: pd.DatetimeIndex([ts]).normalize()[0] 
Out[21]: Timestamp('2014-11-12 00:00:00') 
+0

Cảm ơn. Đó là những gì tôi đang tìm kiếm. – Hill

0
pd.Timestamp('2014-11-12 13:35') - pd.offsets.Micro(0, normalize=True) == Timestamp('2014-11-12 00:00:00') 
0

Lưu ý rằng phương pháp replace không thay đổi Dấu thời gian, vì vậy nếu bạn muốn giữ Dấu thời gian được sửa đổi bạn phải chỉ định:

In [2]: ts = pd.Timestamp('2014/11/12 13:35') 
In [3]: ts.replace(hour=0) 
Out[3]: Timestamp('2014-11-12 00:35:00') 
In [4]: ts 
Out[4]: Timestamp('2014-11-12 13:35:00') 

Lưu ý: ts không được sửa đổi trong mã ở trên.

In [5]: ts = ts.replace(hour=0) 
In [6]: ts 
Out[6]: Timestamp('2014-11-12 00:35:00') 
Các vấn đề liên quan