2015-09-28 33 views
6

Xin chào Tôi có dataframe sauPython: giảm độ chính xác gấu trúc timestamp dataframe

df = 

     Record_ID  Time 
     94704 2014-03-10 07:19:19.647342 
     94705 2014-03-10 07:21:44.479363 
     94706 2014-03-10 07:21:45.479581 
     94707 2014-03-10 07:21:54.481588 
     94708 2014-03-10 07:21:55.481804 

Có thể đã sau đây?

df1 = 

     Record_ID  Time 
     94704 2014-03-10 07:19:19 
     94705 2014-03-10 07:21:44 
     94706 2014-03-10 07:21:45 
     94707 2014-03-10 07:21:54 
     94708 2014-03-10 07:21:55 
+0

Có phải 'Thời gian' loại 'datetime' không? –

+0

Điều này có quan trọng không? – EdChum

+0

Nếu tôi có chữ số 'type (df.Time [0])' nó trả về 'pandas.tslib.Timestamp' – emax

Trả lời

5

Nếu bạn thực sự phải loại bỏ các microsecond phần của datetime, bạn có thể sử dụng phương pháp Timestamp.replace cùng với Series.apply phương pháp để áp dụng nó trên series, để thay thế một phần microsecond với 0. Ví dụ -

df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0)) 

Demo -

In [25]: df 
Out[25]: 
    Record_ID      Time 
0  94704 2014-03-10 07:19:19.647342 
1  94705 2014-03-10 07:21:44.479363 
2  94706 2014-03-10 07:21:45.479581 
3  94707 2014-03-10 07:21:54.481588 
4  94708 2014-03-10 07:21:55.481804 

In [26]: type(df['Time'][0]) 
Out[26]: pandas.tslib.Timestamp 

In [27]: df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0)) 

In [28]: df 
Out[28]: 
    Record_ID    Time 
0  94704 2014-03-10 07:19:19 
1  94705 2014-03-10 07:21:44 
2  94706 2014-03-10 07:21:45 
3  94707 2014-03-10 07:21:54 
4  94708 2014-03-10 07:21:55 
+0

Đó chính xác là những gì tôi đang tìm kiếm. – emax

7

Bạn có thể chuyển đổi cơ bản NumPy datetime64[ns] giá trị cho datetime64[s] giá trị:

In [11]: df['Time'] = df['Time'].values.astype('datetime64[s]') 

In [12]: df 
Out[12]: 
    Record_ID    Time 
0  94704 2014-03-10 07:19:19 
1  94705 2014-03-10 07:21:44 
2  94706 2014-03-10 07:21:45 
3  94707 2014-03-10 07:21:54 
4  94708 2014-03-10 07:21:55 

Lưu ý rằng reassigning những datetime64[s] giá trị cho một cột của một DataFrame gấu trúc tự động chuyển đổi chúng trở lại thành datetime64[ns], do đó kết quả cuối cùng vẫn được lưu trữ dưới dạngGiá trị, nhưng cuộc gọi đến astype làm cho phần thập phân của giây bị xóa.

+0

Gấu trúc chỉ hỗ trợ 'datetime64 [ns]'? Có cách nào được xây dựng để thay đổi độ chính xác không. Nói như chỉ ngày? – mnky9800n

+1

@ mnky9800n: Hiện tại, Pandas 'NDFrames' chỉ hỗ trợ' datetime64 [ns] '. – unutbu

+0

Có kế hoạch hỗ trợ các lịch biểu khác không? Tôi nghĩ có những lý do rõ ràng vì phạm vi datetime64 [ns] chỉ có thể dài ~ 600 năm. – mnky9800n

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