Ich bin mir sicher, dass dies einfach ist, aber als pandas
absoluter Neuling in Python habe ich Probleme herauszufinden, wie ich Variablen in einem Datenrahmen durchlaufen und mit jedem eine Regression ausführen kann.
Folgendes mache ich:
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()
Ich weiß, dass ich eine solche Regression durchführen kann:
regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
Angenommen, ich möchte dies für jede Spalte im Datenrahmen tun. Insbesondere möchte ich FIUIX auf FSTMX und dann FSAIX auf FSTMX und dann FSAVX auf FSTMX zurückführen. Nach jeder Regression möchte ich die Residuen speichern.
Ich habe verschiedene Versionen der folgenden Versionen ausprobiert, aber ich muss die Syntax falsch verstehen:
resids = {}
for k in returns.keys():
reg = sm.OLS(returns[k],returns.FSTMX).fit()
resids[k] = reg.resid
Ich denke, das Problem ist, dass ich nicht weiß, wie ich mit Schlüssel auf die Rückgabespalte verweisen soll, also returns[k]
ist es wahrscheinlich falsch.
Jede Anleitung, wie dies am besten zu tun ist, wäre sehr dankbar. Vielleicht fehlt mir ein allgemeiner Pandas-Ansatz.
quelle
for i in len(df): if i + 1 != len(df): # sm.OLS(returns[returns.coloumns[i]], returns[returns.columns[ i+1]]), fit()
Antworten:
quelle
for x in df
, über Zeilen zu iterieren. : - /for idx, row in df.iterrows()
iteriert über Zeilen. Da colbasierte Operationen vektorisiert sind, ist es natürlich, dass die Hauptiteration über Spalten liegt :)Sie können verwenden
iteritems()
:quelle
Diese Antwort besteht darin, ausgewählte Spalten sowie alle Spalten in einem DF zu durchlaufen.
df.columns
gibt eine Liste mit allen Spaltennamen im DF an. Das ist nicht sehr hilfreich, wenn Sie alle Spalten durchlaufen möchten. Dies ist jedoch praktisch, wenn Sie nur über Spalten Ihrer Wahl iterieren möchten.Wir können Pythons Listen-Slicing einfach verwenden, um df.columns gemäß unseren Anforderungen zu schneiden. Um beispielsweise alle Spalten außer der ersten zu durchlaufen, können wir Folgendes tun:
In ähnlicher Weise können wir alle Spalten in umgekehrter Reihenfolge durchlaufen:
Mit dieser Technik können wir alle Spalten auf viele coole Arten durchlaufen. Denken Sie auch daran, dass Sie die Indizes aller Spalten einfach abrufen können, indem Sie:
quelle
Sie können Datenrahmenspalten anhand der Position mit indizieren
ix
.Dies gibt beispielsweise die erste Spalte zurück. (0 wäre der Index)
Dies gibt die erste Zeile zurück.
Dies wäre der Wert am Schnittpunkt von Zeile 0 und Spalte 1:
und so weiter. Sie können also
enumerate()
returns.keys():
die Nummer verwenden, um den Datenrahmen zu indizieren.quelle
ix
ist veraltet, verwenden Sieiloc
Eine Problemumgehung besteht darin, das zu transponieren
DataFrame
und über die Zeilen zu iterieren.quelle
Mit dem Listenverständnis können Sie alle Spaltennamen (Kopfzeile) abrufen:
[column for column in df]
quelle
list(df.columns)
oder[c for c in df]
Basierend auf der akzeptierten Antwort , wenn ein Index für jede Spalte ebenfalls gewünscht wird :
Der obige
df[column]
Typ istSeries
, der einfach innumpy
ndarray
s konvertiert werden kann :quelle
Ich bin etwas spät dran, aber so habe ich das gemacht. Die Schritte:
Dies ist der Code, den ich in DataFrame verwendet habe
aft_tmt
. Fühlen Sie sich frei, auf Ihren Anwendungsfall zu extrapolieren.quelle