Почему назначения даты в кадре данных не являются типом даты? - PullRequest
0 голосов
/ 24 ноября 2018

Фрейм данных df_vol создается следующим образом

df_vol = df.loc[:, 1].map(fd.retrieve_symbol_datetime).to_frame('maturity')
df_vol['date'] = df_vol.index.date

df_vol.head()
                           maturity        date
2018-11-01 11:31:53.023  2022-04-01  2018-11-01
2018-11-01 16:30:15.287  2022-04-01  2018-11-01
2018-11-01 10:23:06.779  2022-10-01  2018-11-01
2018-11-01 16:30:15.291  2022-10-01  2018-11-01
2018-11-01 11:30:56.251  2018-12-01  2018-11-01

Дальнейшая проверка df_vol показывает

df_vol.dtypes
maturity    category
date          object
dtype: object

Я ожидаю, что столбец maturity имеет датувведите как он заполнен содержимым fd.retrieve_symbol_datetime(), функция, которая возвращает pandas.datetime().Кроме того, столбец date является типом объекта, хотя он принимает значения из index.date.

Мне интересно иметь типы datetime, так как в конечном итоге я хочу сделать разницу

pd.eval("(df_vol.maturity - df_vol.date)")

retrieve_symbol_datetime ()

def retrieve_symbol_datetime(future: str):
    """
    Retrieves the maturity date of a future whose format is of the form AAAMYY.

    Params
    -------
    future : string, of form 'AAAMYY'
        This format is for futures where 'AAA' is the string that identifies
        the symbol, 'M' is the character that identifies the month, and 'YY' is
        a two-digit number that identifies the year.

    Returns : pandas.datetime
        Returns the date of maturiry of the future's symbol.

    Example
    -------
    If future = 'DI1Z20', then it returnts a pandas.datetime(2020, 12, 01).

    """
    year = 2000 + int(future[4: 6])
    month = convert_letter_symbol_month(future[3: 4])
    return pd.datetime(year, month, 1).date()

1 Ответ

0 голосов
/ 24 ноября 2018

Столбец проблемы categorical, одно из возможных решений - декатегоризация, а для date используйте floor для времени удаления:

df_vol['maturity'] = pd.to_datetime(df_vol['maturity'].astype(str))
df_vol['date'] = df_vol.index.floor('d')

df_vol['diff'] = (df_vol['maturity'] - df_vol['date']).dt.days
print (df_vol)
                          maturity       date  diff
2018-11-01 11:31:53.023 2022-04-01 2018-11-01  1247
2018-11-01 16:30:15.287 2022-04-01 2018-11-01  1247
2018-11-01 10:23:06.779 2022-10-01 2018-11-01  1430
2018-11-01 16:30:15.291 2022-10-01 2018-11-01  1430
2018-11-01 11:30:56.251 2018-12-01 2018-11-01    30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...