2017-09-22 5 views
0

Ich versuche einen Weg zu finden, nur einen Wert von einem großen Datenrahmen in Python zu lesen. Ich habe 2 Datentabellen in meinem Projekt.Wie lese ich einen einzelnen Wert aus Datenrahmen in Python?

Man sieht wie folgt aus:

Company ID Company 201512 201511 ... 199402 199401 
1234  abc  1.1  0.8  ... 2.1  -0.9 
. 
. 
. 
4321  cba  2.1  -0.4 ... 0.3  -0.1 

Es gibt etwa 260 Monate und 10.000 Unternehmen. Ich muss ihre monatlichen Renditen eins nach dem anderen überprüfen und prüfen, ob hinter diesem Datenpunkt 36 gültige Datenpunkte liegen. Das heißt, es gibt keine "0" oder "NaN". Wenn es 36 gültige Datenpunkte gibt, muss ich eine Regression dieser 36 Datenpunkte gegen 7 Faktoren durchführen, die in einer anderen Tabelle aufgeführt sind.

Die andere Tabelle sieht wie folgt aus:

Month Factor1  Factor2  ...  Factor6  Factor7 
201512 -0.4  1.1   ...  2.1   1.2 
. 
. 
. 
199401 0.1   0.2   ...  0.3   0.4 

Nun mein Problem ist, dass ich nicht einen Weg finden könnte nur ein Wert zu einem Zeitpunkt aus Tabelle 1 und erstellen Sie eine Schleife für sie zu laden. Kann jemand bitte beraten?

+0

Warum ist '0' keine gültige monatliche Rücksendung? – acushner

+0

Nun, Sie könnten 'value = df ['some_field']. Iloc [the_index]' verwenden, aber vielleicht wollen Sie das nicht in einer 'for'-Schleife, wenn es eine Möglichkeit gibt, 'group_by.aggregate()' auf irgendeine Art und Weise nimm einen bestimmten Wert. – roganjosh

+0

Da 0 sehr wahrscheinlich nur ein fehlender Datenpunkt oder Tippfehler ist. –

Antwort

0

wollen Sie keine for-Schleife dafür.

vorausgesetzt 0 eine gültige monatliche Rendite ist und dass Sie nur 36 Spalten nach Company haben, können Sie bequem alle Firmen mit gültigen Monatsrendite Daten finden:

df = df[df.notnull().all(1)] 

, wenn aus irgendeinem Grund, Sie wollen bekommen befreien Sie sich von 0 s, können Sie zunächst eine ersetzen tun:

df = df[df.replace(0, np.nan).notnull().all(1)] 

bearbeiten für den Kommentar:

Sie könnte so etwas tun:

cols = df.columns 
first_col = get_first_return_col(df) 
for i in range(first_col, len(cols)): 
    df = df[df[cols[i : i + 36]].notnull().all(1)] 
    run_regression(df[cols[i]]) 
+1

Danke für die Antwort. Dies hilft, wenn ich für jedes Unternehmen nur eine Regression benötige, aber ich muss für jedes Unternehmen mehrere Regressionen durchführen. Es geht so. Ich las 201512 Daten für Firma abc, ich fand 36 gültige Daten nach diesem Punkt, ich liefere eine Regression und notierte die Resultate. Dann überprüfe ich 201511 Daten für das gleiche Unternehmen, um zu sehen, ob es noch 36 Monate gültige Datenpunkte gibt. Wenn ja, muss ich für diese 36 Monate eine weitere Regression durchführen, die nur 1 Monat von der vorherigen Regression abweicht. –

+0

überprüfen Sie die aktualisierte Antwort, vielleicht wird helfen. – acushner

1

Sie sich über Zeilen mit folgendem Code laufen kann:

for index, row in df.iterrows(): 

Dann würde die index der Index der Zeile, und Sie die Spalten zugreifen können mit sagen lassen row["Company"] für Beispiel.

Verwandte Themen