Ошибка типа: как исправить. Допустимо только с DatetimeIndex, TimedeltaIndex или PeriodIndex, но получил экземпляр индекса - PullRequest
0 голосов
/ 23 марта 2020

Я хочу вычислить сложную месячную доходность акций за 12 месяцев для получения годовой доходности.

Вот что я сделал, но получаю сообщение об ошибке

Month_Return = pd.read_csv("Monthly Stock Return.csv") 
Month_Return.set_index('gvkey', inplace=True,drop = False)
Month_Return = Month_Return.rename(columns={"gvkey": "Global_comp_key",
              'iid':"issue identifier","tic":"ticker","conm":"Company name",
              "prccm":"Price_Close_Monthly","exchg":"Stock Exchange 
              ","datadate":"Date})
Month_Return['Date'] =  pd.to_datetime(Month_Return['Date'], format='%Y%M%d')
Month_Return = Month_Return.set_index('Date')
###Month_Return['Date'] = Month_Return['Date'].dt.date###

gvkey  issue   datadate    ticker  Company_name  Price_Close_Monthly    Stock Exchange  gsector

1003    1     2003-01-31    ANTQ    A.A             0.0400                  19.0        25.0
1003    1     2004-01-31    ANTQ    A.A.            0.0400                  19.0        25.0
1003    1     2004-01-29    ANTQ    A.A.            0.0400                  19.0        25.0
1003    1     2004-01-31    ANTQ    A.B             0.0400                  19.0        25.0
1003    1     2004-01-30    ANTQ    A.C             0.0001                  19.0        25.0

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

results_storage['month'] = Month_Return.index.month
results_storage['year'] = Month_Return.index.year

 Date       Price_Close_Monthly     year    month
 2003-01-31     0.0400              2003    1
 2004-01-31     0.0400              2004    1
 2004-01-29     0.0400              2004    1
 2004-01-31     0.0400              2004    1
 2004-01-30     0.0001              2004    1

df_Month_Return_annual =results_storage['Price_Close_Monthly'].
                                     resample('M').ffill().pct_change()

Я просто упростил скрипт и все еще получаю ту же ошибку

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but 
got an instance of 'Index'

1 Ответ

0 голосов
/ 23 марта 2020

Я думаю, вам нужно добавить столбец преобразования в datetimeindex:

Month_Return = pd.read_csv("Monthly Stock Return.csv") 
Month_Return.set_index('gvkey', inplace=True,drop = False)
Month_Return['Date'] =  pd.to_datetime(Month_Return['Date'], format='%Y%M%d')
Month_Return = Month_Return.set_index('Date')

Month_Return['month'] = Month_Return.index.month
Month_Return['year'] = Month_Return.index.year


df_Month_Return_annual =  (Month_Return['Price_Close_Monthly'].resample('M')
                                .ffill()
                                .pct_change())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...