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?
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.
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.
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.