Как перебирать столбцы базы данных 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]

Interesting Posts

Flask – настроить dev-сервер для видимости по сети

Ошибка кодирования при десериализации объекта json от Google

Tkinter & PIL Изменить размер изображения на этикетке

Errbot: получение ошибки yapsy при попытке настроить плагины через интерфейс командной строки

PYTHON: чтение файла Csv и печать / запись каждой строки (сохранить заголовок) в файл HTML

'forms.ContactForm object' не имеет атрибута 'hidden_tag'

Использование памяти в словаре в Python?

Импортировать модуль python из внешнего URL-адреса

Как вернуть значение из функции, выполняемой QThread и Queue

Как я могу захватить параметр API в представлении Django?

Как объединить последовательные данные в фрейме данных и добавить значение

Запросы подписи HMAC в Python

отбрасывать первую и последнюю строку из каждой группы

Как добавить событие Facebook с новым графическим API

В чем разница между raise StopIteration и оператором return в генераторах?

Python - лучший язык программирования в мире.