Регрессируйте каждый столбец отдельно с последним столбцом фрейма данных в Pandas - PullRequest
2 голосов
/ 10 июля 2020
returns = df.pct_change(1) * 100

возвращает фрейм данных с датами в качестве индекса, где я хочу регрессировать каждый столбец индивидуально с последним столбцом (который является ^ BSESN) фрейма данных. Поскольку существует более 700 столбцов, я хочу перебирать столбцы. Я также хочу сохранять остатки после каждой регрессии. Я использовал различные версии следующего, но постоянно получаю одну и ту же ошибку. Мне нужно удалить строки, которые имеют значения NaN во время каждой отдельной регрессии (вместо удаления строк с любым столбцом, имеющим значение nan).

residuals = {}
for column in returns.columns[:-1]:
  selected = returns[['^BSESN', column]].dropna()
  reg = sm.OLS(selected[column], returns['^BSESN']).fit()
  residuals[column] = reg.residuals

Но я продолжаю получать следующую ошибку:

MissingDataError: exog contains inf or nans

Как убрать ошибку? Мы будем очень признательны за любые рекомендации относительно того, как лучше всего это сделать.

1 Ответ

1 голос
/ 10 июля 2020

Измените вызов OLS на

reg = sm.OLS(selected[column], selected['^BSESN']).fit()

Посмотрите, что returns['^BSESN'], как в исходном сообщении, не имеет пропущенных значений.

Поскольку в некоторых столбцах нет строк совпадая с ^BSESN, вы можете добавить if, чтобы игнорировать эти столбцы:

residuals = {}
for column in returns.columns[:-1]:
  selected = returns[['^BSESN', column]].dropna()
  if selected.shape[0] > 0:
    reg = sm.OLS(selected[column], selected['^BSESN']).fit()
    residuals[column] = reg.residuals
...