# Pandas to\_datetime: Преобразование строки Pandas в дату и время

В этом уроке **вы узнаете, как использовать функцию Pandas to\_datetime для преобразования столбца Pandas в дату и время.** Pandas предоставляет огромное количество методов и функций, которые делают работу с датами невероятно универсальной. Однако данные не всегда читаются правильно.

К концу этого учебного пособия вы узнаете:

* Как использовать функцию Pandas to\_datetime для преобразования столбца в дату и время
* Как указать коды формата для преобразования строк в разные форматы
* Преобразование целых чисел секунд и дат в дату и время в Pandas

Оглавление

* [Понимание функции Pandas to\_datetime](#ponimanie-funkcii-pandas-to_datetime)
* [Используйте Pandas to\_datetime для преобразования столбца в дату и время](#ispolzuite-pandas-to_datetime-dlya-preobrazovaniya-stolbca-v-datu-i-vremya)
* [Укажите форматы даты и времени в Pandas to\_datetime](#ukazhite-formaty-daty-i-vremeni-v-pandas-to_datetime)
* [Преобразование целых дней Unix в DateTime в Pandas](#preobrazovanie-celykh-dnei-unix-v-datetime-v-pandas)
* [Преобразование целых секунд в DateTime в Pandas](#preobrazovanie-celykh-sekund-v-datetime-v-pandas)
* [Преобразование нескольких столбцов Pandas в DateTime](#preobrazovanie-neskolkikh-stolbcov-pandas-v-datetime)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Понимание функции Pandas to\_datetime

Давайте начнем с изучения функции Pandas `to_datetime()`, которая позволяет передать серию Pandas для преобразования ее в дату и время. Функция предоставляет множество универсальных параметров, которые позволяют настроить поведение.

Давайте взглянем на эти параметры:

```python
# Понимание функции Pandas to_datetime()
pd.to_datetime(
    arg,                            # Столбец для преобразования
    errors='raise',                 # Как обрабатывать ошибки
    dayfirst=False,                 # Указывает, что дни идут первыми
    yearfirst=False,                # Указывает, что годы идут первыми
    utc=None,                       # Указывает, как обрабатывать часовой пояс UTC
    format=None,                    # Формат strftime для разбора
    exact=True,                     # Указывает, нужно ли искать точное совпадение
    unit=None,                      # Единица измерения, если используется целочисленный временной штамп
    infer_datetime_format=False,    # Указывает, нужно ли определять формат автоматически
    origin='unix',                  # Определяет эталонную дату
    cache=True                      # Указывает, использовать ли кэш для ускорения работы с одинаковыми датами
    )     
```

Как видно, функция имеет огромное количество доступных параметров. В этом учебном пособии мы сосредоточимся на основных параметрах, которые охватывают большинство случаев использования функции.

### Используйте Pandas to\_datetime для преобразования столбца в дату и время

Давайте начнем с простого преобразования строкового столбца в дату и время. Мы можем загрузить Pandas DataFrame ниже и вывести его типы данных с помощью метода `info()`:

```python
import pandas as pd

df = pd.DataFrame(['2022-04-01',
'2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05'], columns=['Date'])
print(df.info())

# Возвращает:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 записей, от 0 до 4
# Столбцы данных (всего 1 столбец):
#  #   Столбец  Количество ненулевых значений  Тип данных 
# ---  ------  ------------------------------  ---------- 
#  0   Date    5 ненулевых                    object
# типы данных: object(1)
# используемая память: 168.0+ байт
# None
```

Хотя данные выглядят как даты, на самом деле они отформатированы как строки. Давайте посмотрим, как мы можем использовать функцию Pandas to\_datetime для преобразования строки в дату и время.

```python
# Преобразование столбца в тип данных "Дата и время" в Pandas
import pandas as pd

df = pd.DataFrame(['2022-04-01',
'2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05'], columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'])
print(df.info())

# Возвращает:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 записей, от 0 до 4
# Столбцы данных (всего 1 столбец):
#  #   Столбец  Количество ненулевых значений  Тип данных       
# ---  ------  ------------------------------  ----------       
#  0   Date    5 ненулевых                    datetime64[ns]
# типы данных: datetime64 
# используемая память: 168.0 байт
# None

```

Pandas смог распознать формат даты и корректно преобразовал строку в тип данных datetime. В следующем разделе вы узнаете, как задавать конкретные форматы.

### Укажите форматы даты и времени в Pandas to\_datetime

Часто бывает, что вы получаете столбец с датами в формате, который Pandas не может сразу определить. В таких случаях вы можете использовать параметр `format=`, чтобы указать конкретную строку формата. Эти [строки следуют соглашениям strftime](https://datagy.io/python-strftime/), которые распространены во многих языках программирования.

Загрузим DataFrame с необычной строкой форматирования:

```python
# Загрузка странного формата даты
import pandas as pd

df = pd.DataFrame(['2022-04-*-01', '2022-04-*-02', '2022-04-*-03', '2022-04-*-04', '2022-04-*-05'], columns=['Date'])
print(df)

# Возвращает:
#            Date
# 0  2022-04-*-01
# 1  2022-04-*-02
# 2  2022-04-*-03
# 3  2022-04-*-04
# 4  2022-04-*-05
```

Давайте использовать параметр `format=`, чтобы указать пользовательский формат:

```python
# Преобразование столбца в тип данных "Дата и время" в Pandas
import pandas as pd

df = pd.DataFrame(['2022-04-*-01', '2022-04-*-02', '2022-04-*-03', '2022-04-*-04', '2022-04-*-05'], columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-*-%d')

print(df)

# Возвращает:
#         Date
# 0 2022-04-01
# 1 2022-04-02
# 2 2022-04-03
# 3 2022-04-04
# 4 2022-04-05
```

Мы видим на примере выше, что задав пользовательскую строку формата, Pandas может правильно определить формат даты.

### Преобразование целых дней Unix в DateTime в Pandas

Еще одно мощное преобразование, которое предоставляет Pandas, - это преобразование целых чисел в Unix-дни. Это можно сделать, передав серию целых чисел в объект времени. Для этого необходимо указать параметр `unit=`, чтобы указать дни, что означает, что целые числа представляют собой дни от заданного начала.

По умолчанию Pandas будет использовать `'unix'` origin, который представляет собой 1 января 1970 года в 00:00:00 UTC. Посмотрим, как мы можем преобразовать столбец целых чисел в объект даты и времени:

```python
# Преобразование целого числа в дату и время в Pandas
import pandas as pd

df = pd.DataFrame([12345, 23453, 12324, 34534, 12313], columns=['Дата'])
df['Дата'] = pd.to_datetime(df['Дата'], unit='D')

print(df)

# Возвращает:
#         Дата
# 0 2003-10-20
# 1 2034-03-19
# 2 2003-09-29
# 3 2064-07-20
# 4 2003-09-18
```

Поскольку Pandas использует `'unix'` в качестве значения по умолчанию для `origin=`, нам не нужно было указывать это.

### Преобразование целых секунд в DateTime в Pandas

В ситуациях, когда необходимо преобразовать значения целых чисел, представляющих секунды, это работает так же, как в приведенном выше примере, за исключением того, что необходимо указать `unit='s'` в качестве параметра:

```python
# Преобразование столбца целых чисел в дату и время в Pandas
import pandas as pd

df = pd.DataFrame([12345, 23453, 12324, 34534, 12313], columns=['Дата'])
df['Дата'] = pd.to_datetime(df['Дата'], unit='s')

print(df)

# Возвращает:
#                  Дата
# 0 1970-01-01 03:25:45
# 1 1970-01-01 06:30:53
# 2 1970-01-01 03:25:24
# 3 1970-01-01 09:35:34
# 4 1970-01-01 03:25:13
```

В последнем разделе вы узнаете, как конвертировать несколько столбцов Pandas в datetime.

### Преобразование нескольких столбцов Pandas в DateTime

Чтобы преобразовать несколько столбцов в datetime в Pandas, можно использовать сочетание функций Pandas apply и to\_datetime. Метод `.apply()` применяется к разделу нескольких столбцов, а функция `to_datetime()` внутри него.

Давайте посмотрим, как мы можем сделать это с помощью Pandas:

```python
# Преобразование нескольких столбцов в дату и время в Pandas
import pandas as pd

df = pd.DataFrame(
    [['2022-04-01', '2022-05-01'],
    ['2022-04-02', '2022-05-02'],
    ['2022-04-03', '2022-05-03'],
    ['2022-04-04', '2022-05-04'],
    ['2022-04-05', '2022-05-05']], columns=['Дата1', 'Дата2'])

df[['Дата1', 'Дата2']] = df[['Дата1', 'Дата2']].apply(pd.to_datetime)

print(df)

# Возвращает:
#        Дата1      Дата2
# 0 2022-04-01 2022-05-01
# 1 2022-04-02 2022-05-02
# 2 2022-04-03 2022-05-03
# 3 2022-04-04 2022-05-04
# 4 2022-04-05 2022-05-05
```

В приведенном выше примере функция `pd.to_datetime` была передана методу `.apply()`, чтобы преобразовать несколько столбцов в формат даты и времени.

### Заключение

В этом уроке вы узнали, как использовать функцию Pandas to\_datetime для преобразования столбца в тип данных datetime. Вы узнали, как делать это с использованием строк и целых чисел. Вы также узнали, как преобразовать несколько столбцов в тип данных datetime с помощью метода `.apply()`

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

Чтобы узнать больше о связанных темах, ознакомьтесь с уроками ниже:

* DateTime в Pandas и Python
* Части даты и времени Pandas (месяц, год и т. д.)
* Преобразование даты в строку в Python: объяснение strftime в Python
* Pandas: добавление дней в столбец даты
* [Официальная документация: Pandas to\_datetime](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/pandas/pandas-to_datetime-preobrazovanie-stroki-pandas-v-datu-i-vremya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
