> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/uchebniki-po-pandas-i-numpy/pandas/pandas-date_range-kak-sozdat-diapazon-dat-v-pandas.md).

# Pandas date\_range: Как Создать Диапазон Дат в Pandas

В этом уроке мы глубоко погрузимся в один из самых необходимых и универсальных инструментов библиотеки Pandas — функцию `date_range`. Независимо от того, только ли вы начинаете изучать мощь Pandas или уже являетесь опытным пользователем, эта функция определенно должна быть в вашем арсенале Python. Это расширит ваши возможности работы с датами и временем в Pandas.

Овладение функцией date\_range в Pandas откроет перед вами мир возможностей для анализа временных рядов. По завершении этого урока вы не только научитесь использовать функцию date\_range на полную мощность, но и сможете создавать пользовательские диапазоны дат с указанными частотами, интервалами и периодами для различных реальных приложений.

Наденьте шапочку знаний и пристегнитесь, вас ждет захватывающее путешествие в удивительный мир Pandas и функции date

Оглавление

* [Функция диапазона дат Pandas](#funkciya-diapazona-dat-pandas)
* [Создание простого диапазона дат с помощью Pandas `date_range`](#sozdanie-prostogo-diapazona-dat-s-pomoshyu-pandas-date_range)
* [Создание диапазонов дат с настраиваемыми частотами в Pandas](#sozdanie-diapazonov-dat-s-nastraivaemymi-chastotami-v-pandas)
* [Использование кратного пользовательской частоты в Pandas `date_range`](#ispolzovanie-kratnogo-polzovatelskoi-chastoty-v-pandas-date_range)
* [Создание диапазонов дат с определенными периодами](#sozdanie-diapazonov-dat-s-opredelennymi-periodami)
* [Создание диапазонов дат с определенными периодами и периодичностью](#sozdanie-diapazonov-dat-s-opredelennymi-periodami-i-periodichnostyu)
* [Изменение границ диапазона дат Pandas](#izmenenie-granic-diapazona-dat-pandas)
* [Включение часовых поясов при создании диапазона дат Pandas](#vklyuchenie-chasovykh-poyasov-pri-sozdanii-diapazona-dat-pandas)
* [Изменение имени индекса диапазона дат Pandas](#izmenenie-imeni-indeksa-diapazona-dat-pandas)
* [Заключение: создание диапазонов дат с помощью Pandas](#zaklyuchenie-sozdanie-diapazonov-dat-s-pomoshyu-pandas)

### Функция диапазона дат Pandas

Давайте посмотрим на функцию date\_range Pandas, доступную в Pandas. Функция предоставляет большое количество различных параметров и аргументов по умолчанию.

```python
# Understanding the Pandas date_range Function
pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, inclusive=None)
```

Прежде чем продолжить, давайте немного подробнее рассмотрим эти параметры. **Важно отметить, что для работы функции должно быть указано ровно три из следующих четырех параметров:** `start=`, `end=`, `periods=`, and `freq=`.

| Параметр  | Описание                                                                                    | Аргумент по умолчанию | Принятые значения                                            |
| --------- | ------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------ |
| start     | Левая граница для генерации дат                                                             | `None`                | string or datetime-like                                      |
| end       | Правильная граница для генерации дат                                                        | `None`                | string or datetime-like                                      |
| periods   | Количество периодов для генерации                                                           | `None`                | int                                                          |
| freq      | Частоты, используемые для генерации диапазонов                                              | ‘`D`‘                 | string or Dateoffset                                         |
| tz        | Имя часового пояса для значений даты и времени с учетом часового пояса.                     | `None`                | string or timezone info                                      |
| normalize | Следует ли нормализовать даты начала и окончания до полуночи перед созданием диапазона дат. | `False`               | boolean                                                      |
| name      | Имя результирующего DatetimeIndex                                                           | `None`                | string                                                       |
| inclusive | Какие границы включить                                                                      | `'both'`              | <p><br><code>{“both”, “neither”, “left”, “right”}</code></p> |

Функция заменила предыдущий параметр `closed=` на гораздо более мощный параметр `inclusive=` в январе 2022 года в версии 1.4.

Давайте теперь перейдем к созданию нашего первого диапазона дат с использованием функции `date_range()` в Pandas.

### Создание простого диапазона дат с помощью Pandas date\_range

**Самый простой тип диапазона дат, который мы можем создать с помощью функции `date_range()` в Pandas, - это указать начальную дату, конечную дату и частоту (которая по умолчанию установлена как “D” для дней)**. Давайте посмотрим, как мы можем создать диапазон дат, который включает в себя дни с 1 июля 2023 года по 7 июля 2023 года:

```python
# Create a Simple Date Range in Pandas
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-07')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-01', '2023-07-02', '2023-07-03', '2023-07-04',
            #    '2023-07-05', '2023-07-06', '2023-07-07'],
            #   dtype='datetime64[ns]', freq='D')
```

В указанном выше блоке кода мы создаем объект диапазона дат Pandas с использованием функции `pd.date_range()`. В этом случае мы передали только два аргумента, соответствующие параметрам `start=` и `end=`. По умолчанию функция будет использовать частоту `'D'`, что означает разделение каждого значения по дням.

Давайте изучим этот объект `dates` немного подробнее, распечатав его тип:

```python
# Checking the Type of a Date Range Object
print(type(dates))

# Returns:
# <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
```

При осмотре типа объекта можно увидеть, что он возвращает `DatetimeIndex`. Это означает, что Pandas создает очень производительный объект.

Давайте рассмотрим некоторые другие типы диапазонов дат, которые мы можем создать, настраивая используемые частоты.

### Создание диапазонов дат с настраиваемыми частотами в Pandas

В Pandas по умолчанию используется частота `'D'`, что означает, что каждый элемент находится на расстоянии одного дня друг от друга. Однако мы также можем указать наши собственные частоты, используя строку частот. В таблице ниже приведены некоторые важные строки частот. Это аналогично извлечению частей даты из даты в Pandas.

| Псевдоним | Описание                                                 |
| --------- | -------------------------------------------------------- |
| B         | частота рабочих дней                                     |
| C         | пользовательская частота рабочих дней                    |
| D         | частота календарных дней                                 |
| W         | еженедельная частота                                     |
| M         | частота окончания месяца                                 |
| SM        | частота окончания полумесяца (15-е число и конец месяца) |
| BM        | частота окончания рабочего месяца                        |
| BH        | частота рабочих часов                                    |
| H         | почасовая частота                                        |
| T, min    | поминутная частота                                       |

Давайте посмотрим, как мы можем создать диапазон дат, используя функцию Pandas date\_range(), где значения делятся по полумесячной частоте. Создадим диапазон дат с 1 июля 2023 г. по 31 сентября 2023 г.:

```python
# Create a Date Range in Pandas with a Custom Frequency
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-08-31', freq='SM')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-15', '2023-07-31', '2023-08-15', '2023-08-31'], dtype='datetime64[ns]', freq='SM-15')
```

В указанном выше блоке кода мы установили начальную и конечную даты с 1 июля 2023 года по 31 сентября 2023 года. Мы использовали частоту дважды в месяц, которая выбирает 15-е число месяца и последний день месяца. Из-за этого 1 июля игнорируется. Более подробную информацию о пользовательских строках частоты можно найти в [официальной документации](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases)

### Использование кратного пользовательской частоты в Pandas date\_range

Мы можем пойти еще дальше, указав кратность пользовательской частоты. Например, если мы хотим создать диапазон дат, который пропускает каждый второй день, мы можем использовать `freq='2D'`. Давайте посмотрим, как мы можем воспроизвести наш предыдущий пример с этой частотой:

```python
# Create a Custom Date Range in Pandas
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-07', freq='2D')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-01', '2023-07-03', '2023-07-05', '2023-07-07'], dtype='datetime64[ns]', freq='2D')
```

В указанном выше блоке кода мы использовали частоту `'2D'`, что обозначает двухдневный интервал. Это означает, что мы начинаем с первого указанного дня, затем генерируем каждый второй день до окончания. Этот процесс гораздо проще, чем добавление дат к дате в Pandas

### Создание диапазонов дат с определенными периодами

До сих пор мы рассматривали использование начальных и конечных дат при создании диапазона дат. Это означает, что Pandas определяет, сколько значений включить. Мы также можем указать количество значений, которые нужно сгенерировать, используя параметр **`periods=`**

Давайте посмотрим, как мы можем создать диапазон дат, который будет содержать пять значений между 1 и 20 июля 2023 года:

```python
# Create a Custom Date Range with Specific Periods
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-20', periods=5)
print(dates)

# Returns:
# DatetimeIndex(['2023-07-01 00:00:00', '2023-07-05 18:00:00',
#                '2023-07-10 12:00:00', '2023-07-15 06:00:00',
#                '2023-07-20 00:00:00'],
            #   dtype='datetime64[ns]', freq=None)
```

В приведенном выше блоке кода мы указали три параметра: `start`, `end` и `periods`. Поскольку мы не указали параметр `freq=`, Pandas самостоятельно решает, какую частоту использовать!

Аналогично, мы можем не указывать конец диапазона дат, что позволяет нам определять периоды и частоту. Давайте рассмотрим это в следующем разделе.

### Создание диапазонов дат с определенными периодами и периодичностью

Функция `date_range()` библиотеки Pandas требует указания трех из четырех параметров: `start=`, `end=`, `periods=`, и `freq=`. Это позволяет опустить параметр `end=`, тем самым задать начальное значение, частоту и количество периодов.

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

```python
# Create a Custom Date Range with Specific Periods and Frequencies
import pandas as pd
dates = pd.date_range('2023-07-01', freq='B', periods=5)
print(dates)

# Returns:
# DatetimeIndex(['2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06',
#                '2023-07-07'],
#               dtype='datetime64[ns]', freq='B')
```

В указанном выше блоке кода мы указали, что хотим создать диапазон дат, содержащий только рабочие дни, начиная с 1 июля 2023 года на протяжении пяти периодов. Поскольку 1 июля 2023 года выпадает на субботу, диапазон на самом деле начинается с 3 июля 2023 года.

### Изменение границ диапазона дат Pandas

По умолчанию функция `date_range` в Pandas будет включать в себя как начальную, так и конечную даты диапазона. Это связано с тем, что в Pandas используется параметр `inclusive='both'`. Мы можем передать следующие параметры, чтобы изменить это поведение:

* “both”, который включает оба значения
* “neither”, что исключает оба значения
* “left”, который включает только левое значение
* “right”, который включает только правильное значение

Давайте посмотрим, как мы можем опустить оба значения, повторив наш первый пример:

```python
# Modifying Edge Behavior in a Pandas Date Range
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-07', inclusive='neither')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-02', '2023-07-03', '2023-07-04', '2023-07-05',
#                '2023-07-06'],
#               dtype='datetime64[ns]', freq='D')
```

В приведенном выше примере мы использовали ежедневную частоту с 1 по 7 июля 2023 года. Однако мы изменили параметр `inclusive=` так, чтобы оба конца диапазона были исключены. Из-за этого начальное и конечное значения были исключены.

### Включение часовых поясов при создании диапазона дат Pandas

По умолчанию, значения в диапазоне дат Pandas не содержат информации о часовом поясе, что означает отсутствие данных о часовом поясе. Мы можем указать конкретный часовой пояс, используя имя желаемого часового пояса. Например, давайте укажем часовой пояс восточного побережья США, передав `'US/Eastern'` в качестве часового пояса.

Чтобы указать часовой пояс, используйте параметр `tz=`. Давайте посмотрим, как это выглядит ниже:

```python
# Create a Date Range in Pandas with Timezones
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-07', tz='US/Eastern')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-01 00:00:00-04:00', '2023-07-02 00:00:00-04:00',
#                '2023-07-03 00:00:00-04:00', '2023-07-04 00:00:00-04:00',
#                '2023-07-05 00:00:00-04:00', '2023-07-06 00:00:00-04:00',
#                '2023-07-07 00:00:00-04:00'],
#               dtype='datetime64[ns, US/Eastern]', freq='D')
```

Видно, что значения в результирующем диапазоне дат теперь включают информацию о часовом поясе, специфическую для часового пояса США/Восточный.

### Изменение имени индекса диапазона дат Pandas

В этом последнем разделе мы рассмотрим, как изменить имя результирующего индекса. Поскольку функция `date_range()` в Pandas возвращает объект в стиле индекса, это изменит структуру данных. Давайте посмотрим, как мы можем указать имя индекса, используя параметр `name=`

```python
# Create a Date Range in Pandas with an Index Name
import pandas as pd
dates = pd.date_range('2023-07-01', '2023-07-07', name='Date')
print(dates)

# Returns:
# DatetimeIndex(['2023-07-01', '2023-07-02', '2023-07-03', '2023-07-04',
#                '2023-07-05', '2023-07-06', '2023-07-07'],
#               dtype='datetime64[ns]', name='Date', freq='D')
```

В приведенном выше примере мы видим, что атрибут `name=` теперь также включен в диапазон дат. Когда мы создаем DataFrame с этим, эта метка также применяется к индексу. Давайте посмотрим, как это выглядит:

```python
# Create a DateFrame in Pandas with an Index Name
import pandas as pd
df = pd.DataFrame(range(7), columns=['Num'], index=pd.date_range('2023-07-01', '2023-07-07', name='Date'))
print(df)

# Returns:
#             Num
# Date           
# 2023-07-01    0
# 2023-07-02    1
# 2023-07-03    2
# 2023-07-04    3
# 2023-07-05    4
# 2023-07-06    5
# 2023-07-07    6
```

В приведенном выше DataFrame видно, что индекс теперь имеет название, `'Date'`

### Заключение: создание диапазонов дат с помощью Pandas

В заключение мы успешно рассмотрели основы функции Pandas date\_range, подробно остановились на ее многочисленных применениях и настройках, которые позволяют нам с легкостью решать широкий спектр задач, связанных с временными рядами. Мы исследовали всё, начиная от создания пользовательских диапазонов дат с заданными частотами и периодами, и заканчивая детальной настройкой часовых поясов и имен индексов для лучшего соответствия нашим требованиям.

Вы можете узнать больше о функции, посетив [официальную документацию.](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html)
