Tôi nghĩ rằng có thể có một nỗ lực hợp nhất hơn trong câu trả lời để giải thích rõ hơn về mối quan hệ giữa mô-đun datetime của Python, datetime64 / timedelta64 và các đối tượng Timestamp / Timedelta của gấu trúc.
Thư viện chuẩn datetime của Python
Thư viện chuẩn datetime có bốn đối tượng chính
- thời gian - chỉ thời gian, tính bằng giờ, phút, giây và micro giây
- ngày - chỉ năm, tháng và ngày
- datetime - Tất cả các thành phần của thời gian và ngày
- timedelta - Một lượng thời gian với đơn vị ngày tối đa
Tạo bốn đối tượng này
>>> import datetime
>>> datetime.time(hour=4, minute=3, second=10, microsecond=7199)
datetime.time(4, 3, 10, 7199)
>>> datetime.date(year=2017, month=10, day=24)
datetime.date(2017, 10, 24)
>>> datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 24, 4, 3, 10, 7199)
>>> datetime.timedelta(days=3, minutes = 55)
datetime.timedelta(3, 3300)
>>> # add timedelta to datetime
>>> datetime.timedelta(days=3, minutes = 55) + \
datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199)
datetime.datetime(2017, 10, 27, 4, 58, 10, 7199)
Các đối tượng datetime64 và timedelta64 của NumPy
NumPy không có các đối tượng ngày và thời gian riêng biệt, chỉ có một đối tượng datetime64 để thể hiện một thời điểm duy nhất. Đối tượng datetime của mô đun datetime có độ chính xác micro giây (một phần triệu giây). Đối tượng datetime64 của NumPy cho phép bạn đặt độ chính xác của nó từ hàng giờ cho đến giây (10 ^ -18). Hàm tạo của nó linh hoạt hơn và có thể lấy nhiều loại đầu vào.
Xây dựng các đối tượng datetime64 và timedelta64 của NumPy
Truyền một số nguyên với một chuỗi cho các đơn vị. Xem tất cả các đơn vị ở đây . Nó được chuyển đổi thành nhiều đơn vị sau kỷ nguyên UNIX: ngày 1 tháng 1 năm 1970
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Bạn cũng có thể sử dụng các chuỗi miễn là chúng ở định dạng ISO 8601.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Timedeltas có một đơn vị
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Cũng có thể tạo chúng bằng cách trừ hai đối tượng datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp và Timedelta xây dựng nhiều chức năng hơn trên NumPy
Một con gấu trúc Timestamp là một khoảnh khắc rất giống với thời gian nhưng có nhiều chức năng hơn. Bạn có thể xây dựng chúng bằng pd.Timestamp
hoặc pd.to_datetime
.
>>> pd.Timestamp(1239.1238934) #defautls to nanoseconds
Timestamp('1970-01-01 00:00:00.000001239')
>>> pd.Timestamp(1239.1238934, unit='D') # change units
Timestamp('1973-05-24 02:58:24.355200')
>>> pd.Timestamp('2017-10-24 05') # partial strings work
Timestamp('2017-10-24 05:00:00')
pd.to_datetime
hoạt động rất giống nhau (với một vài tùy chọn khác) và có thể chuyển đổi danh sách các chuỗi thành Dấu thời gian.
>>> pd.to_datetime('2017-10-24 05')
Timestamp('2017-10-24 05:00:00')
>>> pd.to_datetime(['2017-1-1', '2017-1-2'])
DatetimeIndex(['2017-01-01', '2017-01-02'], dtype='datetime64[ns]', freq=None)
Chuyển đổi datetime của Python thành datetime64 và Dấu thời gian
>>> dt = datetime.datetime(year=2017, month=10, day=24, hour=4,
minute=3, second=10, microsecond=7199)
>>> np.datetime64(dt)
numpy.datetime64('2017-10-24T04:03:10.007199')
>>> pd.Timestamp(dt) # or pd.to_datetime(dt)
Timestamp('2017-10-24 04:03:10.007199')
Chuyển đổi datetime64 numpy thành datetime và Dấu thời gian
>>> dt64 = np.datetime64('2017-10-24 05:34:20.123456')
>>> unix_epoch = np.datetime64(0, 's')
>>> one_second = np.timedelta64(1, 's')
>>> seconds_since_epoch = (dt64 - unix_epoch) / one_second
>>> seconds_since_epoch
1508823260.123456
>>> datetime.datetime.utcfromtimestamp(seconds_since_epoch)
>>> datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)
Chuyển đổi sang Dấu thời gian
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Chuyển đổi từ Dấu thời gian sang datetime và datetime64
Điều này khá dễ dàng vì dấu thời gian của gấu trúc rất mạnh
>>> ts = pd.Timestamp('2017-10-24 04:24:33.654321')
>>> ts.to_pydatetime() # Python's datetime
datetime.datetime(2017, 10, 24, 4, 24, 33, 654321)
>>> ts.to_datetime64()
numpy.datetime64('2017-10-24T04:24:33.654321000')
numpy
,pandas
các phiên bản.