Перейти к содержимому

Как datetime перевести в строку

  • автор:

Как преобразовать DateTime в строку в Pandas (с примерами)

Вы можете использовать следующий базовый синтаксис для преобразования столбца из DateTime в строку в pandas:

df['column_name']. dt.strftime('%Y-%m-%d') 

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: преобразование DateTime в строку в Pandas

Предположим, у нас есть следующий кадр данных pandas, который показывает продажи в каком-то магазине за четыре разных дня:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df day sales 0 2021-01-01 1440 1 2021-01-05 1845 2 2021-01-06 2484 3 2021-01-09 2290 

Мы можем использовать функцию dtypes для просмотра типа данных каждого столбца в DataFrame:

#view data type of each column df.dtypes day datetime64[ns] sales int64 dtype: object 

Мы видим, что столбец «день» имеет класс DateTime .

Чтобы преобразовать «день» в строку, мы можем использовать следующий синтаксис:

#convert 'day' column to string df['day'] = df['day']. dt.strftime('%Y-%m-%d') #view updated DataFrame df day sales 0 2021-01-01 1440 1 2021-01-05 1845 2 2021-01-06 2484 3 2021-01-09 2290 

Мы можем снова использовать функцию dtypes , чтобы убедиться, что столбец «день» теперь является строкой:

#view data type of each column df.dtypes day object sales int64 dtype: object 

Примечание.Полную документацию по функции dt.strftime() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:

Преобразование времени python

У меня есть время в формате строки и его надо преобразовать в формат «ДД.ММ.ГГГГ», т. е. чтобы осталось только «05.08.2021». Все попытки приводят к ошибкам. И ещё, с символом «T» надо как-нибудь по особенному обращаться или его можно просто заменить на пробел? Как мне правильно преобразовать строку в время? Первый вариант

import datetime day = "2021-08-05T23:56:44.233856" day_x = datetime.datetime.strptime(day, '%d.%m.%Y').date() print(day_x) 

Второй вариант

import datetime day = "2021-08-05T23:56:44.233856" day_x = datetime.datetime.strptime(day, '%d.%m.%Y') print(day_x) 

Возникающая ошибка

ValueError: time data '2021-08-05T23:56:44.233856' does not match format '%d.%m.%Y' 

Я пытался заменить «T» на пробел с помощью

day = day.replace('T', ' ') 

но ничего не изменилось

Работа с датами и временем

Основной функционал для работы с датами и временем сосредоточен в модуле datetime в виде следующих классов:

Класс date

Для работы с датами воспользуемся классом date , который определен в модуле datetime. Для создания объекта date мы можем использовать конструктор date, который последовательно принимает три параметра: год, месяц и день.

date(year, month, day)

Например, создадим какую-либо дату:

import datetime yesterday = datetime.date(2017,5, 2) print(yesterday) # 2017-05-02

Если необходимо получить текущую дату, то можно воспользоваться методом today() :

from datetime import date today = date.today() print(today) # 2017-05-03 print("<>.<>.<>".format(today.day, today.month, today.year)) # 2.5.2017

С помощью свойств day, month, year можно получить соответственно день, месяц и год

Класс time

За работу с временем отвечает класс time . Используя его конструктор, можно создать объект времени:

time([hour] [, min] [, sec] [, microsec])

Конструктор последовательно принимает часы, минуты, секунды и микросекунды. Все параметры необязательные, и если мы какой-то параметр не передадим, то соответствующее значение будет инициализироваться нулем.

from datetime import time current_time = time() print(current_time) # 00:00:00 current_time = time(16, 25) print(current_time) # 16:25:00 current_time = time(16, 25, 45) print(current_time) # 16:25:45

Класс datetime

Класс datetime из одноименного модуля объединяет возможности работы с датой и временем. Для создания объекта datetime можно использовать следующий конструктор:

datetime(year, month, day [, hour] [, min] [, sec] [, microsec])

Первые три параметра, представляющие год, месяц и день, являются обязательными. Остальные необязательные, и если мы не укажем для них значения, то по умолчанию они инициализируются нулем.

from datetime import datetime deadline = datetime(2017, 5, 10) print(deadline) # 2017-05-10 00:00:00 deadline = datetime(2017, 5, 10, 4, 30) print(deadline) # 2017-05-10 04:30:00

Для получения текущих даты и времени можно вызвать метод now() :

from datetime import datetime now = datetime.now() print(now) # 2017-05-03 11:18:56.239443 print("<>.<>.<> <>:<>".format(now.day, now.month, now.year, now.hour, now.minute)) # 3.5.2017 11:21 print(now.date()) print(now.time())

С помощью свойств day, month, year, hour, minute, second можно получить отдельные значения даты и времени. А через методы date() и time() можно получить отдельно дату и время соответственно.

Преобразование из строки в дату

Из функциональности класса datetime следует отметить метод strptime() , который позволяет распарсить строку и преобразовать ее в дату. Этот метод принимает два параметра:

strptime(str, format)

Первый параметр str представляет строковое определение даты и времени, а второй параметр — формат, который определяет, как различные части даты и времени расположены в этой строке.

Для определения формата мы можем использовать следующие коды:

  • %d : день месяца в виде числа
  • %m : порядковый номер месяца
  • %y : год в виде 2-х чисел
  • %Y : год в виде 4-х чисел
  • %H : час в 24-х часовом формате
  • %M : минута
  • %S : секунда

Применим различные форматы:

from datetime import datetime deadline = datetime.strptime("22/05/2017", "%d/%m/%Y") print(deadline) # 2017-05-22 00:00:00 deadline = datetime.strptime("22/05/2017 12:30", "%d/%m/%Y %H:%M") print(deadline) # 2017-05-22 12:30:00 deadline = datetime.strptime("05-22-2017 12:30", "%m-%d-%Y %H:%M") print(deadline) # 2017-05-22 12:30:00

Документация

Преобразование между массивами datetime, числами и текстом

Обзор

datetime лучший тип данных для представления моментов времени. datetime значения имеют гибкие форматы отображения и до точности наносекунды и могут составлять часовые пояса, летнее время и секунды прыжка. Однако, если вы работаете с кодом, созданным в MATLAB ® R2014a или ранее, или если вы совместно используете код с другими, которые используют такую версию, вы можете должны быть работать с датами и время, сохраненное в одном из этих трех форматов:

  • Строка даты — вектор символов.
Example: Thursday, August 23, 2012 9:45:44.946 AM
Example: [2012 8 23 9 45 44.946]
Example: 7.3510e+005

Строки даты, векторы и числа могут храниться как массивы значений. Сохраните несколько строк даты в массиве ячеек из символьных векторов, несколько векторов даты в m — 6 матриц и несколько последовательных чисел даты в матрице.

Можно преобразовать любой из этих форматов к datetime массив с помощью datetime функция. Если ваш существующий код MATLAB ожидает последовательный номер даты или вектор даты, используйте datenum или datevec функции, соответственно, чтобы преобразовать datetime массив к ожидаемому формату данных. Преобразовывать datetime массив к векторам символов, используйте char или cellstr функции.

Начиная в R2016b, также можно преобразовать datetime массив к массиву строк с string функция.

Преобразование между Datetime и векторами символов

Строка даты может быть вектором символов, состоявшим из полей, связанных с определенной датой и/или время. Существует несколько способов представлять даты и времена в текстовом формате. Например, все следующее является векторами символов, представляющими 23 августа 2010 в 16:35:42:

'23-Aug-2010 04:35:06 PM' 'Wednesday, August 23' '08/23/10 16:35' 'Aug 23 16:35:42.946'

Строка даты включает символы, которые разделяют поля, такие как дефис, пробел и двоеточие, используемое здесь:

d = '23-Aug-2010 16:35:42' 

Преобразуйте одну или несколько строк даты в datetime массив с помощью datetime функция. Для лучшей эффективности задайте формат входных строк даты как вход к datetime .

Примечание

Спецификаторы, что datetime использование, чтобы описать форматы даты и времени отличается от спецификаторов что datestr , datevec , и datenum функции принимают.

Для полного списка спецификаторов формата даты и времени смотрите Format свойство datetime тип данных.

t = datetime(d,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = datetime 23-Aug-2010 16:35:42

Несмотря на то, что строка даты, d , и datetime скаляр, t , выглядите подобными, они не равны. Просмотрите размер и тип данных каждой переменной.

whos d t
Name Size Bytes Class Attributes d 1x20 40 char t 1x1 17 datetime

Преобразуйте datetime массив к использованию вектора символов char или cellstr . Например, преобразуйте текущую дату и время к метке времени, чтобы добавить к имени файла.

t = datetime('now','Format','yyyy-MM-dd''T''HHmmss')
t = datetime 2017-01-03T151105
S = char(t); filename = ['myTest_',S]
filename = 'myTest_2017-01-03T151105'

Преобразование между массивами datetime и массивами строк

Начиная в R2016b, можно использовать string функция, чтобы создать массив строк. Если массив строк содержит строки даты, то можно преобразовать массив строк в datetime массив с datetime функция. Точно так же можно преобразовать datetime массив к массиву строк с string функция.

Преобразуйте массив строк. MATLAB отображает строки в двойных кавычках. Для лучшей эффективности задайте формат входных строк даты как вход к datetime .

str = ["24-Oct-2016 11:58:17"; "19-Nov-2016 09:36:29"; "12-Dec-2016 10:09:06"]
str = 3×1 string array "24-Oct-2016 11:58:17" "19-Nov-2016 09:36:29" "12-Dec-2016 10:09:06"
t = datetime(str,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 3×1 datetime array 24-Oct-2016 11:58:17 19-Nov-2016 09:36:29 12-Dec-2016 10:09:06

Преобразуйте datetime значение к строке.

t = datetime('25-Dec-2016 06:12:34'); str = string(t)
str = "25-Dec-2016 06:12:34"

Преобразование между векторами Datetime и даты

Вектор даты 1 6 вектор из чисел с двойной точностью. Элементы вектора даты с целочисленным знаком, за исключением элемента секунд, который может быть дробным. Временные стоимости описываются в 24-часовом обозначении. Нет никакой установки AM или PM.

Вектор даты располагается в следующем порядке:

year month day hour minute second

Следующий вектор даты представляет 10:45:07 24 октября 2012:

[2012 10 24 10 45 07]

Преобразуйте один или несколько векторов даты в datetime массив с помощью datetime функция:

t = datetime([2012 10 24 10 45 07])
t = datetime 24-Oct-2012 10:45:07

Вместо использования datevec чтобы извлечь компоненты значений datetime, используйте функции такой как year , month , и day вместо этого:

y = year(t)
y = 2012

В качестве альтернативы получите доступ к соответствующему свойству, такому как t.Year для значений года:

y = t.Year
y = 2012

Преобразование последовательных чисел даты в Datetime

Последовательный номер даты представляет календарную дату как номер дней, который передал начиная с установленной основной даты. В MATLAB последовательная дата номер 1 1 января, 0000.

Последовательное время может представлять части дней, начинающихся в полночь; например, 18:00 равняется 0,75 последовательным дням. Так вектор символов ’31-Oct-2003, 6:00 PM’ в MATLAB дата номер 731885.75.

Преобразуйте одно или несколько последовательных чисел даты в datetime массив с помощью datetime функция. Задайте тип номера даты, который преобразуется:

t = datetime(731885.75,'ConvertFrom','datenum')
t = datetime 31-Oct-2003 18:00:00

Преобразование массивов datetime в числовые значения

Некоторые функции MATLAB принимают типы числовых данных, но не значения datetime как входные параметры. Чтобы применить эти функции к вашим данным о дате и времени, преобразуйте значения datetime в значимые числовые значения. Затем вызовите функцию. Например, log функция принимает double входные параметры, но не datetime входные параметры. Предположим, что у вас есть datetime массив дат, охватывающих курс изыскания или эксперимента.

t = datetime(2014,6,18) + calmonths(1:4)
t = 1×4 datetime array 18-Jul-2014 18-Aug-2014 18-Sep-2014 18-Oct-2014

Вычтите значение источника. Например, значение источника может быть стартовым днем эксперимента.

dt = t - datetime(2014,7,1)
dt = 1×4 duration array 408:00:00 1152:00:00 1896:00:00 2616:00:00

dt duration массив. Преобразуйте dt к double массив значений в модулях лет, дней, часов, минут или секунд с помощью years дни часы минуты , или seconds функция, соответственно.

x = hours(dt)
x = 408 1152 1896 2616

Передайте double массив как вход к log функция.

y = log(x)
y = 6.0113 7.0493 7.5475 7.8694

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *