Cómo iterar sobre columnas de un marco de datos de pandas

Resuelto itzy asked hace 9 años • 11 respuestas

Tengo este código usando Pandas en Python:

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()

Sé que puedo ejecutar una regresión como esta:

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

pero ¿ cómo puedo hacer esto para cada columna del marco de datos ? Específicamente, ¿cómo puedo iterar sobre columnas para ejecutar la regresión en cada una?

Específicamente, quiero hacer una regresión de cada símbolo de cotización (FIUIX, FSAIX y FSAVX) en FSTMX y almacenar los residuos para cada regresión.

Probé varias versiones de lo siguiente, pero nada de lo que probé da el resultado deseado:

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

¿Hay algún problema con esa returns[k]parte del código? ¿ Cómo puedo usar el kvalor para acceder a una columna? ¿O existe un enfoque más sencillo?

itzy avatar Jan 29 '15 22:01 itzy
Aceptado

Antigua respuesta:

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

La respuesta anterior todavía funciona, pero se agregó en la época de pandas 0.16.0. Hay mejores versiones disponibles.

Ahora puedes hacer:

for series_name, series in df.items():
    print(series_name)
    print(series)
The Unfun Cat avatar Sep 14 '2015 06:09 The Unfun Cat

Puedes usar iteritems():

for name, values in df.iteritems():
    print('{name}: {value}'.format(name=name, value=values[0]))
mdh avatar Apr 02 '2016 11:04 mdh