pandas.to_datetime#
-
pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, exact=
, unit=None, infer_datetime_format= , origin='unix', cache=True)[источник]# Преобразовать аргумент в datetime.
Эта функция преобразует скаляр, массивоподобный объект,
SeriesилиDataFrame/словареподобный объект в объект datetime pandas.- Параметры:
- argint, float, str, datetime, list, tuple, 1-d array, Series, DataFrame/dict-like
Объект для преобразования в datetime. Если
DataFrameпредоставлен, метод ожидает как минимум следующие столбцы:"year","month","day". Столбец "year" должен быть указан в 4-значном формате.- ошибки{‘ignore’, ‘raise’, ‘coerce’}, по умолчанию ‘raise’
Если
'raise', тогда некорректный разбор вызовет исключение.Если
'coerce', тогда некорректный разбор будет установлен какNaT.Если
'ignore', тогда некорректный разбор вернет входные данные.
- dayfirstbool, по умолчанию False
Укажите порядок разбора даты, если arg является str или list-like. Если
True, анализирует даты с днем первым, например"10/11/12"парсится как2012-11-10.Предупреждение
dayfirst=Trueне является строгим, но предпочтет парсинг с днем первым.- yearfirstbool, по умолчанию False
Укажите порядок разбора даты, если arg является строкой или похожим на список.
Если
Trueразбирает даты с годом первым, например,"10/11/12"парсится как2010-11-12.Если оба dayfirst и yearfirst являются
True, yearfirst предшествует (так же какdateutil).
Предупреждение
yearfirst=Trueне является строгим, но предпочтет разбор с годом первым.- utcbool, по умолчанию False
Управление парсингом, локализацией и преобразованием, связанными с часовыми поясами.
Если
True, функция всегда возвращает локализованный в UTC с учетом часового поясаTimestamp,SeriesилиDatetimeIndex. Для этого временные зоны без учета часового пояса локализованный как UTC, в то время как данные с учётом часового пояса преобразовано в UTC.Если
False(по умолчанию), входные данные не будут преобразованы в UTC. Входные данные без часового пояса останутся таковыми, а с часовым поясом сохранят свои смещения времени. Существуют ограничения для смешанных смещений (обычно, летнее время), см. Примеры раздел для подробностей.
Предупреждение
В будущей версии pandas разбор дат со смешанными часовыми поясами будет вызывать ошибку, если utc=True. Пожалуйста, укажите utc=True чтобы включить новое поведение и отключить это предупреждение. Чтобы создать Series со смещенными и object тип данных, пожалуйста, используйте apply и datetime.datetime.strptime.
См. также: общая документация pandas о преобразование часового пояса и локализация.
- форматstr, по умолчанию None
Формат strftime для разбора времени, например.
"%d/%m/%Y". См. документация strftime для получения дополнительной информации о вариантах, хотя обратите внимание, что"%f"будет парсить вплоть до наносекунд. Вы также можете передать:“ISO8601”, для разбора любого ISO8601 строковое представление времени (не обязательно в точно таком же формате);
“mixed”, чтобы определить формат для каждого элемента отдельно. Это рискованно, и вам, вероятно, следует использовать это вместе с dayfirst.
Примечание
Если
DataFrameпередается, тогда формат не имеет эффекта.- точныйbool, по умолчанию True
Управление тем, как формат используется:
Если
True, требуют точного формат совпадение.Если
False, разрешить формат для совпадения в любом месте целевой строки.
Нельзя использовать одновременно с
format='ISO8601'илиformat='mixed'.- единицаstr, по умолчанию 'ns'
Единица измерения аргумента (D, s, ms, us, ns) обозначает единицу, которая является целым или вещественным числом. Это будет основано на точке отсчета. Например, с
unit='ms'иorigin='unix', это вычислило бы количество миллисекунд до начала эпохи Unix.- infer_datetime_formatbool, по умолчанию False
Если
Trueи нет формат если задано, попытаться определить формат строк даты и времени на основе первого не-NaN элемента, и если его можно определить, переключиться на более быстрый метод их разбора. В некоторых случаях это может увеличить скорость разбора примерно в 5-10 раз.Устарело с версии 2.0.0: Строгая версия этого аргумента теперь используется по умолчанию, передача его не имеет эффекта.
- originскаляр, по умолчанию 'unix'
Определите опорную дату. Числовые значения будут интерпретированы как количество единиц (определяется единица) с этой даты отсчета.
Если
'unix'(или POSIX) время; точка отсчета установлена на 1970-01-01.Если
'julian', единица измерения должна быть'D', и начало установлено на начало Юлианского календаря. Юлианский день0присваивается дню, начинающемуся в полдень 1 января 4713 года до н.э.Если преобразуемо в Timestamp (Timestamp, dt.datetime, np.datetimt64 или строку даты), начало устанавливается в Timestamp, определенный origin.
Если число с плавающей точкой или целое, начало — это разница (в единицах, определенных
unitаргумент) относительно 1970-01-01.
- cachebool, по умолчанию True
Если
True, используйте кэш уникальных, преобразованных дат для применения преобразования даты и времени. Может обеспечить значительное ускорение при разборе повторяющихся строк дат, особенно с часовыми поясами. Кэш используется только при наличии не менее 50 значений. Наличие значений вне диапазона сделает кэш непригодным и может замедлить разбор.
- Возвращает:
- datetime
Если парсинг прошел успешно. Тип возвращаемого значения зависит от входных данных (типы в скобках соответствуют резервному варианту в случае неудачного парсинга часового пояса или временной метки вне диапазона):
скаляр:
Timestamp(илиdatetime.datetime)подобный массиву:
DatetimeIndex(илиSeriesсobjectdtype, содержащийdatetime.datetime)Series:
Seriesofdatetime64dtype (илиSeriesofobjectdtype, содержащийdatetime.datetime)DataFrame:
Seriesofdatetime64dtype (илиSeriesofobjectdtype, содержащийdatetime.datetime)
- Вызывает:
- ParserError
При неудачном разборе даты из строки.
- ValueError
Когда происходит другая ошибка преобразования даты и времени. Например, когда один из столбцов 'год', 'месяц', 'день' отсутствует в
DataFrame, или когда Timezone-awaredatetime.datetimeнаходится в массиво-подобном объекте смешанных временных смещений, иutc=False.
Смотрите также
DataFrame.astypeПреобразует аргумент в указанный тип данных.
to_timedeltaПреобразовать аргумент в timedelta.
convert_dtypesПреобразовать dtypes.
Примечания
Поддерживаются многие типы входных данных, и они приводят к разным типам выходных данных:
скаляры может быть int, float, str, объект datetime (из стандартной библиотеки
datetimeмодуль илиnumpy). Они преобразуются вTimestampкогда возможно, иначе они преобразуются вdatetime.datetime. Скалярные значения None/NaN/null преобразуются вNaT.array-like может содержать int, float, str, объекты datetime. Они преобразуются в
DatetimeIndexесли возможно, иначе они преобразуются вIndexсobjectGH 8486datetime.datetime. None/NaN/null записи преобразуются вNaTв обоих случаях.Series преобразуются в
Seriesсdatetime64dtype, когда это возможно, в противном случае они преобразуются вSeriesсobjectGH 8486datetime.datetime. Записи None/NaN/null преобразуются вNaTв обоих случаях.DataFrame/словареподобный преобразуются в
Seriesсdatetime64тип данных. Для каждой строки создается дата и время путем сборки различных столбцов фрейма данных. Ключи столбцов могут быть общими сокращениями такими как ['год', 'месяц', 'день', 'минута', 'секунда', 'мс', 'мкс', 'нс']) или множественными формами тех же.
Следующие причины ответственны за
datetime.datetimeобъекты, возвращаемые (возможно, внутриIndexилиSeriesсobjectdtype) вместо правильного типа, обозначенного в pandas (Timestamp,DatetimeIndexилиSeriesсdatetime64dtype):когда любой входной элемент находится до
Timestamp.minили послеTimestamp.max, см. ограничения временных меток.когда
utc=False(по умолчанию) и входные данные являются массивоподобными илиSeriesсодержащий смешанные наивные/осведомленные даты-время, или осведомленные со смешанными смещениями времени. Обратите внимание, что это происходит в (довольно частой) ситуации, когда часовой пояс имеет политику перехода на летнее время. В этом случае вы можете захотеть использоватьutc=True.
Примеры
Обработка различных форматов входных данных
Сборка даты и времени из нескольких столбцов
DataFrame. Ключи могут быть общими сокращениями, такими как ['year', 'month', 'day', 'minute', 'second', 'ms', 'us', 'ns']) или множественными формами тех же>>> df = pd.DataFrame({'year': [2015, 2016], ... 'month': [2, 3], ... 'day': [4, 5]}) >>> pd.to_datetime(df) 0 2015-02-04 1 2016-03-05 dtype: datetime64[ns]
Используя время Unix epoch
>>> pd.to_datetime(1490195805, unit='s') Timestamp('2017-03-22 15:16:45') >>> pd.to_datetime(1490195805433502912, unit='ns') Timestamp('2017-03-22 15:16:45.433502912')
Предупреждение
Для аргумента float может произойти округление точности. Чтобы предотвратить неожиданное поведение, используйте точный тип с фиксированной шириной.
Использование непоследовательного эпохального начала
>>> pd.to_datetime([1, 2, 3], unit='D', ... origin=pd.Timestamp('1960-01-01')) DatetimeIndex(['1960-01-02', '1960-01-03', '1960-01-04'], dtype='datetime64[ns]', freq=None)
Различия в поведении с strptime
"%f"будет парсить вплоть до наносекунд.>>> pd.to_datetime('2018-10-26 12:00:00.0000000011', ... format='%Y-%m-%d %H:%M:%S.%f') Timestamp('2018-10-26 12:00:00.000000001')
Неконвертируемые даты/время
Передача
errors='coerce'принудительно преобразует дату вне диапазона вNaT, в дополнение к принудительному преобразованию не-дат (или непарсируемых дат) вNaT.>>> pd.to_datetime('13000101', format='%Y%m%d', errors='coerce') NaT
Часовые пояса и временные смещения
Поведение по умолчанию (
utc=False) выглядит следующим образом:Входные данные без временной зоны преобразуются в данные без временной зоны
DatetimeIndex:
>>> pd.to_datetime(['2018-10-26 12:00:00', '2018-10-26 13:00:15']) DatetimeIndex(['2018-10-26 12:00:00', '2018-10-26 13:00:15'], dtype='datetime64[ns]', freq=None)
Входные данные с учётом часового пояса с постоянным временным смещением преобразуются в учитывающие часовой пояс
DatetimeIndex:
>>> pd.to_datetime(['2018-10-26 12:00 -0500', '2018-10-26 13:00 -0500']) DatetimeIndex(['2018-10-26 12:00:00-05:00', '2018-10-26 13:00:00-05:00'], dtype='datetime64[ns, UTC-05:00]', freq=None)
Однако входные данные с учетом часового пояса со смешанными временными смещениями (например, выданные из часового пояса с переходом на летнее время, такого как Европа/Париж) не успешно преобразовано в
DatetimeIndex. Разбор дат и времени со смешанными часовыми поясами будет показывать предупреждение, если только utc=TrueАлексей Гёри utc=False будет показано предупреждение ниже и простаяIndexсодержащийdatetime.datetimeобъекты будут возвращены:
>>> pd.to_datetime(['2020-10-25 02:00 +0200', ... '2020-10-25 04:00 +0100']) FutureWarning: In a future version of pandas, parsing datetimes with mixed time zones will raise an error unless `utc=True`. Please specify `utc=True` to opt in to the new behaviour and silence this warning. To create a `Series` with mixed offsets and `object` dtype, please use `apply` and `datetime.datetime.strptime`. Index([2020-10-25 02:00:00+02:00, 2020-10-25 04:00:00+01:00], dtype='object')
Смесь данных с часовыми поясами и без них также преобразуется в простой
Indexсодержащийdatetime.datetimeобъектах:
>>> from datetime import datetime >>> pd.to_datetime(["2020-01-01 01:00:00-01:00", ... datetime(2020, 1, 1, 3, 0)]) FutureWarning: In a future version of pandas, parsing datetimes with mixed time zones will raise an error unless `utc=True`. Please specify `utc=True` to opt in to the new behaviour and silence this warning. To create a `Series` with mixed offsets and `object` dtype, please use `apply` and `datetime.datetime.strptime`. Index([2020-01-01 01:00:00-01:00, 2020-01-01 03:00:00], dtype='object')
Установка
utc=Trueрешает большинство вышеуказанных проблем:Входные данные без временной зоны являются локализованный как UTC
>>> pd.to_datetime(['2018-10-26 12:00', '2018-10-26 13:00'], utc=True) DatetimeIndex(['2018-10-26 12:00:00+00:00', '2018-10-26 13:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)
Входные данные с учётом часового пояса являются преобразовано в UTC (вывод представляет тот же самый момент времени, но рассматриваемый с временным смещением UTC +00:00).
>>> pd.to_datetime(['2018-10-26 12:00 -0530', '2018-10-26 12:00 -0500'], ... utc=True) DatetimeIndex(['2018-10-26 17:30:00+00:00', '2018-10-26 17:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)
Входные данные могут содержать как строки, так и дату-время, указанные выше правила всё ещё применяются
>>> pd.to_datetime(['2018-10-26 12:00', datetime(2020, 1, 1, 18)], utc=True) DatetimeIndex(['2018-10-26 12:00:00+00:00', '2020-01-01 18:00:00+00:00'], dtype='datetime64[ns, UTC]', freq=None)