Ich habe einen Datenrahmen mit 71 Spalten und 30597 Zeilen. Ich möchte alle nicht-nan Einträge durch 1 und die Nan Werte durch 0 ersetzen.
Zuerst habe ich for-loop für jeden Wert des Datenrahmens versucht, der zu viel Zeit in Anspruch genommen hat.
Dann habe ich data_new = data subtract (data) verwendet, was dazu gedacht war, alle Werte des Datenrahmens von sich selbst abzuziehen, so dass ich alle Nicht-Null-Werte auf 0 setzen kann. Es trat jedoch ein Fehler auf, da der Datenrahmen mehrere Zeichenfolgeneinträge enthielt.
Sie können den Rückgabewert von df.notnull()
, das ist False
, wobei der DataFrame NaN
und True
enthält, und den Wert in Ganzzahl umwandeln, wodurch Sie 0
erhalten, wobei der Datenrahmen NaN
und ist 1
andernfalls:
Wenn Sie wirklich in Ihren ursprünglichen DataFrame schreiben möchten, funktioniert dies:
%Vor%Ich mache viele Datenanalysen und bin daran interessiert, neue / schnellere Methoden zur Durchführung von Operationen zu finden. Ich war nie auf die Methode von Jezrael gestoßen, also war ich neugierig, sie mit meiner üblichen Methode zu vergleichen (d. H. Durch Indexierung ersetzen). HINWEIS: Dies ist keine Antwort auf die Frage des OP, sondern es ist eine Illustration der Effizienz der Jezrael-Methode. Da dies keine Antwort ist, werde ich diesen Beitrag entfernen, wenn die Leute ihn nicht nützlich finden (und nachdem er in Vergessenheit geraten ist!). Hinterlasse einen Kommentar, wenn du denkst, ich sollte ihn entfernen.
Ich habe einen mittelgroßen Datenrahmen erstellt und mehrere Ersetzungen sowohl mit der Methode df.notnull (). astype (int) als auch mit der einfachen Indexierung (wie würde ich das normalerweise machen) durchgeführt. Es stellt sich heraus, dass das Letztere ungefähr fünfmal langsamer ist. Nur ein Trick für jeden, der größeren Ersatz tut.
%Vor%Dies ergibt Zeiten von 0,142 s bzw. 0,685 s. Es ist klar, wer der Gewinner ist.
Ich würde empfehlen, eine neue Spalte zu erstellen, anstatt nur zu ersetzen. Sie können die vorherige Spalte jederzeit löschen, aber es ist immer hilfreich, eine Quelle für eine Spalte zu haben, die über eine Operation in einer anderen Spalte gefüllt wird.
z.B. wenn df ['col1'] die vorhandene Spalte ist
%Vor%wobei Spalte2 die neue Spalte ist. Sollte auch funktionieren wenn Col2 String-Einträge hat.