Я уверен, что это просто, но как полный новичок в 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()
но предположим, что я хочу сделать это для каждого столбца в кадре данных. В частности, я хочу регрессировать FIUIX на FSTMX, а затем FSAIX на FSTMX, а затем FSAVX на FSTMX. После каждой регрессии я хочу сохранить остатки.
Я пробовал различные версии следующего, но я, должно быть, неправильно понял синтаксис:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Я думаю, проблема в том, что я не знаю, как ссылаться на столбец возврата по ключу, так returns[k]
что, вероятно, это неправильно.
Любое руководство по наилучшему способу сделать это будет высоко ценится. Возможно, мне не хватает общего подхода панд.
источник
for i in len(df): if i + 1 != len(df): # sm.OLS(returns[returns.coloumns[i]], returns[returns.columns[ i+1]]), fit()
Ответы:
источник
for x in df
перебирать строки, хотя. : - /for idx, row in df.iterrows()
перебирает строки. Поскольку совместные операции векторизованы, естественно, что основная итерация выполняется над столбцами :)Вы можете использовать
iteritems()
:источник
Этот ответ заключается в переборе выбранных столбцов, а также всех столбцов в DF.
df.columns
дает список, содержащий имена всех столбцов в DF. Теперь это не очень полезно, если вы хотите перебрать все столбцы. Но это удобно, если вы хотите перебирать только столбцы по вашему выбору.Мы можем легко использовать нарезку списков в Python для нарезки df.columns в соответствии с нашими потребностями. Например, чтобы перебрать все столбцы, кроме первого, мы можем сделать:
Аналогично, чтобы перебрать все столбцы в обратном порядке, мы можем сделать:
Мы можем перебрать все столбцы множеством интересных способов, используя эту технику. Также помните, что вы можете легко получить индексы всех столбцов, используя:
источник
Вы можете индексировать столбцы данных по позиции, используя
ix
.Это возвращает первый столбец, например. (0 будет индексом)
Это возвращает первый ряд.
Это будет значение на пересечении строки 0 и столбца 1:
и так далее. Таким образом, вы можете
enumerate()
returns.keys():
и использовать номер для индексации данных.источник
ix
устарела, используйтеiloc
Обходной путь - это транспонировать
DataFrame
и перебирать строки.источник
Используя понимание списка, вы можете получить имена всех столбцов (заголовок):
[column for column in df]
источник
list(df.columns)
или[c for c in df]
Основываясь на общепринятом ответ , если индекс , соответствующий каждый столбец также желателен :
Вышеуказанный
df[column]
тип isSeries
, который можно просто преобразовать вnumpy
ndarray
s:источник
Я немного опоздал, но вот как я это сделал. Шаги:
Это код, который я использовал в DataFrame
aft_tmt
. Не стесняйтесь экстраполировать на ваш вариант использования.источник