Как перебирать столбцы базы данных pandas для запуска регрессии

Я уверен, что это просто, но как полный новичок на python, мне трудно понять, как перебирать переменные в кадре данных pandas и запускать регрессию с каждым.

Вот что я делаю:

 all_data = {} for ticker in ['FIUIX', 'FSAIX', 'FSAVX', 'FSTMX']: all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2010', '1/1/2015') prices = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()}) returns = prices.pct_change() 

Я знаю, что могу запустить регрессию следующим образом:

 regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit() 

но предположим, что я хочу сделать это для каждого столбца в dataframe. В частности, я хочу регрессировать FIUIX на FSTMX, а затем FSAIX на FSTMX, а затем FSAVX на FSTMX. После каждой регрессии я хочу сохранить остатки.

Я пробовал различные версии следующего, но я должен получить синтаксис неправильно:

 resids = {} for k in returns.keys(): reg = sm.OLS(returns[k],returns.FSTMX).fit() resids[k] = reg.resid 

Я думаю, проблема в том, что я не знаю, как обращаться к столбцу return по ключу, поэтому returns[k] , вероятно, неправильно.

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

7 Solutions collect form web for “Как перебирать столбцы базы данных pandas для запуска регрессии”

 for column in df: print(df[column]) 

Вы можете использовать iteritems() :

 for name, values in df.iteritems(): print '{name}: {value}'.format(name=name, value=values[0]) 

Вы можете индексировать столбцы dataframe по позиции с помощью ix .

 df1.ix[:,1] 

Например, это возвращает первый столбец. (0 – индекс)

 df1.ix[0,] 

Это возвращает первую строку.

 df1.ix[:,1] 

Это будет значение на пересечении строк 0 и столбца 1:

 df1.ix[0,1] 

и так далее. Таким образом, вы можете enumerate() returns.keys(): и использовать число для индексации фрейма данных.

Обходной путь заключается в транспонировании DataFrame и DataFrame по строкам.

 for column_name, column in df.transpose().iterrows(): print column_name 

Я немного опаздываю, но вот как я это сделал. Шаги:

  1. Создать список всех столбцов
  2. Используйте itertools для принятия комбинаций x
  3. Прибавьте каждый результат R квадрат к кадру данных результата вместе с исключенным списком столбцов
  4. Сортируйте результат DF в порядке убывания квадрата R, чтобы увидеть, какая из них лучше всего подходит.

Это код, который я использовал в DataFrame под названием aft_tmt . Не стесняйтесь экстраполировать ваш прецедент.

 import pandas as pd # setting options to print without truncating output pd.set_option('display.max_columns', None) pd.set_option('display.max_colwidth', None) import statsmodels.formula.api as smf import itertools # This section gets the column names of the DF and removes some columns which I don't want to use as predictors. itercols = aft_tmt.columns.tolist() itercols.remove("sc97") itercols.remove("sc") itercols.remove("grc") itercols.remove("grc97") print itercols len(itercols) # results DF regression_res = pd.DataFrame(columns = ["Rsq", "predictors", "excluded"]) # excluded cols exc = [] # change 9 to the number of columns you want to combine from N columns. #Possibly run an outer loop from 0 to N/2? for x in itertools.combinations(itercols, 9): lmstr = "+".join(x) m = smf.ols(formula = "sc ~ " + lmstr, data = aft_tmt) f = m.fit() exc = [item for item in x if item not in itercols] regression_res = regression_res.append(pd.DataFrame([[f.rsquared, lmstr, "+".join([y for y in itercols if y not in list(x)])]], columns = ["Rsq", "predictors", "excluded"])) regression_res.sort_values(by="Rsq", ascending = False) 

Этот ответ состоит в том, чтобы перебирать выбранные столбцы, а также все столбцы в DF.

df.columns дает список, содержащий все имена колонок в DF. Теперь это не очень полезно, если вы хотите перебирать все столбцы. Но это пригодится, когда вы хотите перебирать только столбцы по вашему выбору.

Мы можем легко нарезать список Python, чтобы нарезать df.columns в соответствии с нашими потребностями. Например, для итерации по всем столбцам, кроме первого, мы можем:

 for column in df.columns[1:]: print(column) 

Аналогично итерации по всем столбцам в обратном порядке, мы можем сделать:

 for column in df.columns[::-1]: print(column) 

Используя эту технику, мы можем перебирать все столбцы множеством крутых способов. Также помните, что вы можете легко получить индексы всех столбцов:

 for ind, column in enumerate(df.columns): print(ind, column) 

Используя понимание списка, вы можете получить все имена столбцов (заголовок):

[column for column in df]

  • Прогнозирование будущих значений с использованием регрессии OLS (Python, StatsModels, Pandas)
  • Тест ADF в statsmodels в Python
  • Установка распределения Пуассона в данные в статистических моделях
  • Вычислить логическую регрессию в python
  • Как добавить сумму к нулю в GLM в Python?
  • Как добавить функции регрессии в python или создать новую функцию регрессии из заданных коэффициентов?
  • В чем разница между pandas ACF и statsmodel ACF?
  • Как я могу выполнить тест отношения правдоподобия на линейной модели смешанного эффекта?
  • Захват высокой многоколоничности в статистических моделях
  • Тест коинтеграции Йохансена на питоне
  • Проблема устойчивости statsmodel Линейная регрессия (ols) - Python
  • Python - лучший язык программирования в мире.