Pandas füllen fehlende Werte im Datenrahmen von einem anderen Datenrahmen aus

7

Ich kann keine Pandas-Funktion finden (die ich vorher gesehen habe), um die NaNs in einem Datenrahmen durch Werte von einem anderen Datenrahmen zu ersetzen (unter der Annahme eines gemeinsamen Index, der spezifiziert werden kann). Irgendwelche Hilfe?

    
user308827 30.03.2015, 22:20
quelle

4 Antworten

11

Wenn Sie zwei Datenrahmen mit der gleichen Form haben, dann:

%Vor%

Wird den Trick machen.

Nur Standorte, bei denen df.isnull() zu True (grün hervorgehoben) ausgewertet wird, können ausgewählt werden.

In der Praxis haben die Datenrahmen nicht immer die gleiche Größe / Form, und Transformationsmethoden (besonders .shift() ) sind nützlich.

Daten, die reinkommen, sind immer schmutzig, unvollständig oder inkonsistent. Par für den Kurs. Es gibt ein ziemlich umfangreiches Panda- Tutorial und dazugehöriges Kochbuch , um mit diesen Situationen umzugehen.

    
Jonathan Eunice 30.03.2015, 22:48
quelle
6

Wie ich gerade erfahren habe, gibt es eine DataFrame.combine_first() Methode, die genau dies tut, mit der zusätzlichen Eigenschaft, dass, wenn Ihr aktualisierender Datenrahmen d2 größer als Ihr ursprüngliches df ist, die zusätzlichen Zeilen und Spalten ebenfalls hinzugefügt werden.

%Vor%     
Anaphory 13.06.2016 14:27
quelle
3

DataFrame.combine_first () beantwortet diese Frage genau.

Manchmal möchten Sie jedoch einige der nicht fehlenden (nicht NaN) Werte von DataFrame A mit Werten aus Datenrahmen B füllen / ersetzen / überschreiben. Diese Frage brachte mich auf diese Seite, und die Lösung ist DataFrame.mask ()

%Vor%

Wenn condition wahr ist, werden die Werte von A verwendet, andernfalls werden die Werte von B verwendet.

Sie könnten zum Beispiel die ursprüngliche Frage des OP mit mask so lösen, dass wenn ein Element von A nicht NaN ist, verwenden Sie es, andernfalls verwenden Sie das entsprechende Element von B.

Aber mit DataFrame.mask () können Sie das ersetzen Werte von A, die keine willkürlichen Kriterien (weniger als null? mehr als 100?) mit Werten von B erfüllen. Also mask ist flexibler und zu viel für dieses Problem, aber ich dachte es wäre erwähnenswert (ich brauchte es um mein Problem zu lösen).

Es ist auch wichtig zu beachten, dass B ein numpliges Array anstelle eines DataFrames sein kann. DataFrame.combine_first () erfordert, dass B ein DataFrame ist, aber < a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.mask.html"> DataFrame.mask () erfordert nur, dass Bs ein NDFrame und seine Dimensionen sind Passe die Dimensionen von A an.

    
John Prior 29.03.2017 21:40
quelle
1

Dies sollte so einfach wie

sein %Vor%     
piRSquared 15.03.2018 23:01
quelle

Tags und Links