# Pandas: Добавить дни к колонке с датами

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

Работа с значениями даты и времени в Pandas может быть пугающим процессом! Изучите, как завершить эту распространенную функцию с помощью простого пошагового.

Короткий ответ: используйте Pandas pd.timedelta()

```python
# Добавить 14 дней к столбцу с датами
df['OriginalDatePlus14'] = df['OriginalDate'] + pd.Timedelta(days=14)
```

**Оглавление**

* [Загрузка образца Pandas Dataframe](#zagruzka-obrazca-pandas-dataframe)
* [Используйте Pandas для добавления постоянных дней в столбец дат](#ispolzuite-pandas-dlya-dobavleniya-postoyannykh-dnei-v-stolbec-dat)
* [Используйте Pandas для добавления дней в столбец дат на основе другого столбца](#ispolzuite-pandas-dlya-dobavleniya-dnei-v-stolbec-dat-na-osnove-drugogo-stolbca)
* [В чем разница между .Timedelta() и .DateOffset()?](#v-chem-raznica-mezhdu-.timedelta-i-.dateoffset)
* [Заключение](#zaklyuchenie)

### Загрузка образца Pandas Dataframe

Если у вас нет набора данных для практики, но вы хотите следовать инструкциям, не стесняйтесь использовать приведенный ниже пример

```python
import pandas as pd

df = pd.DataFrame(
    {'Name': ['Jane', 'Melissa', 'John', 'Matt'],
    'Arrival Date': ['2021-08-01', '2021-04-24', '2021-09-30', '2021-07-13'],
    'Stay Length': [12, 15, 7, 6]})

df['Arrival Date'] = pd.to_datetime(df['Arrival Date'])

print(df)
```

Обратите внимание, что мы использовали функцию Pandas `.to_datetime()` для преобразования столбца `Arrival Date` в тип данных datetime. Это может быть полезно, когда Pandas не может автоматически распознать столбцы как тип datetime

Вывод этого датафрейма

```python
      Name Arrival Date  Stay Length
0     Jane   2021-08-01           12
1  Melissa   2021-04-24           15
2     John   2021-09-31            7
3     Matt   2021-07-13            6
```

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

* `Name`: указывает на имя человека,
* `Arrival Date`: дата, когда человек прибыл
* `Stay Length`: как долго человек оставался

### Используйте Pandas для добавления постоянных дней в столбец дат

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

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

```python
df['Two weeks later'] = df['Arrival Date'] + pd.Timedelta(days=14)

print(df)
```

Вот что мы сделали:

1. Создали новый столбец под названием `Two weeks later`, предназначенный для хранения данных о 14 днях после события.
2. Мы добавляем объект `pd.Timedelta()` непосредственно к столбцу `Arrival Date`
3. В объект Timedelta() мы передаем `days=14` в качестве аргумента

Нам нужно сделать этот шаг, вместо того чтобы, скажем, просто добавить 14, потому что Pandas необходимо указать, что мы хотим добавить 14 _дней_ к нашему столбцу.

Теперь давайте рассмотрим, как можно добавить дни к столбцу на основе значений другого столбца.

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

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

Если вы следили за нашим примером, вам может быть интересно, когда гость выехал. Это можно рассчитать, прибавив колонку `Arrival Date` к колонке `Stay Length`. Однако, как обсуждалось в предыдущем разделе, мы не можем просто сложить эти две колонки.

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

{% tabs %}
{% tab title="Код" %}
```python
df['Departure Date'] = df['Arrival Date'] + pd.to_timedelta(df['Stay Length'], unit='D')

print(df)
```
{% endtab %}

{% tab title="Результат" %}
```python
      Name Arrival Date  Stay Length Departure Date
0     Jane   2021-08-01           12     2021-08-13
1  Melissa   2021-04-24           15     2021-05-09
2     John   2021-09-30            7     2021-10-07
3     Matt   2021-07-13            6     2021-07-19
```
{% endtab %}
{% endtabs %}

Здесь мы использовали метод Pandas `.to_timedelta()`, чтобы преобразовать столбец `Stay Length` в объект timedelta. Мы сделали это, передав столбец как аргумент и указав 'D' для дней в параметре `unit=` .

### В чем разница между .Timedelta() и .DateOffset()?

Pandas предлагает две разные функции для добавления дней: функцию Pandas `.Timedelta()` и функцию Pandas `.DateOffset()`. Разница между этими двумя функциями может быть не сразу видна.

Функция Pandas `.Timedelta()` всегда будет считать день равным 24 часам, даже когда день может фактически составлять 23 или 25 часов (например, из-за перехода на летнее время). Функция `.DateOffset()` зависима от часового пояса и будет это учитывать.

Если работа с часовыми поясами является критически важной для вашей работы и вам нужно, чтобы ваши функции это учитывали, используйте функцию `.DateOffset()` из библиотеки.&#x20;

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

В этой статье вы узнали, как использовать Pandas для добавления дней к столбцу, как путем добавления постоянного количества дней, так и на основе значения другого столбца. В заключение, вы изучили разницу между функцией Pandas `.Timedelta()` и функцией Pandas `.DateOffset()` .

Чтобы узнать больше о Pandas timedelta, [ознакомьтесь с официальной документацией](https://pandas.pydata.org/docs/reference/api/pandas.Timedelta.html). Для получения информации о функции Pandas DateOffset, вы можете ознакомиться с [официальной документацией здесь](https://pandas.pydata.org/docs/reference/api/pandas.tseries.offsets.DateOffset.html).
