Я думаю, що можна було б зробити більш консолідовані зусилля у відповіді, щоб краще пояснити взаємозв'язок між модулем часу дату Python, числом timetime date64 / timedelta64 і об'єктами Pandaas Timestamp / Timedelta.
Стандартна бібліотека Python
Стандартна бібліотека дат має чотири основні об'єкти
- час - лише час, вимірюється в годинах, хвилинах, секундах і мікросекундах
- дата - лише рік, місяць і день
- datetime - Усі компоненти часу та дати
- timedelta - кількість часу з максимальною одиницею днів
Створіть ці чотири об’єкти
>>> 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)
Об'єкти dateum64 та timedelta64 NumPy
У NumPy немає окремих об'єктів дати та часу, лише один об'єкт datetime64, який представляє єдиний момент часу. Об'єкт дати модуля datetime має точність мікросекунди (одна мільйонна частина секунди). Об'єкт datetime64 NumPy дозволяє встановити його точність від годин аж до секунди (10 ^ -18). Його конструктор є більш гнучким і може приймати різні матеріали.
Побудуйте NumPy datetime64 та timedelta64 об'єктів
Введіть ціле число з рядком для одиниць. Дивіться всі підрозділи тут . Він перетворюється на стільки підрозділів після епохи UNIX: 1 січня 1970 року
>>> np.datetime64(5, 'ns')
numpy.datetime64('1970-01-01T00:00:00.000000005')
>>> np.datetime64(1508887504, 's')
numpy.datetime64('2017-10-24T23:25:04')
Ви також можете використовувати рядки, якщо вони у форматі ISO 8601.
>>> np.datetime64('2017-10-24')
numpy.datetime64('2017-10-24')
Тімедельти мають єдине ціле
>>> np.timedelta64(5, 'D') # 5 days
>>> np.timedelta64(10, 'h') 10 hours
Можна також створити їх, віднявши два об’єкти datetime64
>>> np.datetime64('2017-10-24T05:30:45.67') - np.datetime64('2017-10-22T12:35:40.123')
numpy.timedelta64(147305547,'ms')
Pandas Timestamp та Timedelta будують набагато більше функціональних можливостей поверх NumPy
Часова мітка панди - це момент часу, дуже схожий на дату, але з набагато більшою функціональністю. Ви можете побудувати їх з будь-яким pd.Timestamp
або 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
працює дуже аналогічно (з ще кількома параметрами) і може конвертувати список рядків у мітки часу.
>>> 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)
Перетворення дату дати Python в datetime64 та Timestamp
>>> 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')
Перетворення numpy datetime64 в timetime та timetamp
>>> 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)
Перетворити в Timestamp
>>> pd.Timestamp(dt64)
Timestamp('2017-10-24 05:34:20.123456')
Перетворити з Timestamp в datetime і datetime64
Це досить просто, оскільки часові позначки панд дуже потужні
>>> 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
версій.