Tenho certeza de que isso é simples, mas como um novato em python, estou tendo problemas para descobrir como iterar sobre variáveis em um pandas
dataframe e executar uma regressão com cada uma.
Aqui está o que estou fazendo:
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()
Eu sei que posso executar uma regressão como esta:
regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
mas suponha que eu queira fazer isso para cada coluna no quadro de dados. Em particular, quero regredir o FIUIX no FSTMX e, em seguida, o FSAIX no FSTMX e o FSAVX no FSTMX. Após cada regressão, quero armazenar os resíduos.
Eu tentei várias versões do seguinte, mas devo estar com a sintaxe errada:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Acho que o problema é que não sei como me referir à coluna de retornos por chave, então returns[k]
provavelmente está errado.
Qualquer orientação sobre a melhor maneira de fazer isso seria muito apreciada. Talvez esteja faltando uma abordagem comum dos pandas.
fonte
for i in len(df): if i + 1 != len(df): # sm.OLS(returns[returns.coloumns[i]], returns[returns.columns[ i+1]]), fit()
OS semelhanteRespostas:
fonte
for x in df
repetir as linhas, no entanto. : - /for idx, row in df.iterrows()
itera sobre linhas. Como as operações baseadas em colas são vetorizadas, é natural que a iteração principal seja sobre colunas :) #Você pode usar
iteritems()
:fonte
Esta resposta é para percorrer as colunas selecionadas , bem como todas as colunas em um DF.
df.columns
fornece uma lista contendo todos os nomes das colunas no DF. Agora isso não é muito útil se você deseja percorrer todas as colunas. Mas é útil quando você deseja iterar apenas as colunas de sua escolha.Podemos usar a lista do Python fatiando facilmente para dividir o df.columns de acordo com nossas necessidades. Por exemplo, para iterar sobre todas as colunas, exceto a primeira, podemos fazer:
De maneira semelhante à iteração sobre todas as colunas na ordem inversa, podemos fazer:
Podemos iterar todas as colunas de várias maneiras interessantes usando essa técnica. Lembre-se também de que você pode obter os índices de todas as colunas facilmente usando:
fonte
Você pode indexar colunas do quadro de dados pela posição usando
ix
.Isso retorna a primeira coluna, por exemplo. (0 seria o índice)
Isso retorna a primeira linha.
Esse seria o valor na interseção da linha 0 e da coluna 1:
e assim por diante. Assim, você pode
enumerate()
returns.keys():
usar o número para indexar o quadro de dados.fonte
ix
é preterido, usariloc
Uma solução alternativa é transpor
DataFrame
e iterar sobre as linhas.fonte
Usando a compreensão da lista, você pode obter todos os nomes das colunas (cabeçalho):
[column for column in df]
fonte
list(df.columns)
ou[c for c in df]
Com base na resposta aceita , se um índice correspondente a cada coluna também for desejado :
O
df[column]
tipo acima éSeries
, que pode ser simplesmente convertido emnumpy
ndarray
s:fonte
Estou um pouco atrasado, mas aqui está como eu fiz isso. Os passos:
Esse é o código que eu usei no DataFrame chamado
aft_tmt
. Sinta-se à vontade para extrapolar para o seu caso de uso.fonte