Как создать колонку потолочных дат в пандах - PullRequest
0 голосов
/ 03 января 2019

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

import numpy as np
import pandas as pd

dates = ['2014-06-02', '2014-06-03', '2014-06-04', '2014-06-05', '2014-06-06']
sp500_index = [1924.969971, 1924.23999, 1927.880005, 1940.459961, 1949.439941]
df_sp500 = pd.DataFrame({'Date' : dates, 'Close' : sp500_index})
sp500['Date'] = pd.to_datetime(sp500['Date'], format='%Y-%m-%d')
df_sp500['EOM'] = df_sp500['Date'].dt.ceil('M')  # breaks on this line
#df_sp500 = df_sp500[df_sp500['Date'] == df_sp500['EOM']]

df_sp500

, но получаю это сообщение об ошибке:

AttributeError: Может использовать только метод доступа .dt сзначения типа datetime

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

Ответы [ 3 ]

0 голосов
/ 03 января 2019
import numpy as np
import pandas as pd
from pandas.tseries.offsets import MonthEnd


dates = ['2014-06-02', '2014-06-03', '2014-06-04', '2014-06-05', '2014-06-06']
sp500_index = [1924.969971, 1924.23999, 1927.880005, 1940.459961, 1949.439941]
df_sp500 = pd.DataFrame({'Date' : dates, 'Close' : sp500_index})
df_sp500['EOM'] = pd.to_datetime(df_sp500['Date'], format='%Y-%m-%d')+ MonthEnd(0)
#df_sp500['EOM']=df_sp500['EOM'].dt.day #add this if you want only day
0 голосов
/ 03 января 2019

Это уже встроено в datetime с pandas.Series.is_month_end. Вместо вычисления нового столбца просто подмножество с:

df_sp500[df_sp500.Date.dt.is_month_end]

Входные данные

dates = ['2014-06-02', '2014-06-03', '2014-06-04', '2014-06-05', '2014-06-06']
sp500_index = [1924.969971, 1924.23999, 1927.880005, 1940.459961, 1949.439941]

df_sp500 = pd.DataFrame({'Date' : dates, 'Close' : sp500_index})
df_sp500['Date'] = pd.to_datetime(df_sp500['Date'], format='%Y-%m-%d')
0 голосов
/ 03 января 2019

База на документе

Уровень частоты, на который нужно установить индекс. Должна быть фиксированная частота как "S" (второй), а не "ME" (в конце месяца)

Так что мы можем использовать MonthBegin для вашего случая

df_sp500['Date']- pd.offsets.MonthBegin(1) #pd.offsets.MonthEnd(1)
0   2014-06-01
1   2014-06-01
2   2014-06-01
3   2014-06-01
4   2014-06-01
Name: Date, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...