Ich versuche eine Anzahl von verschiedenen in einem Pandas DataFrame alle auf den gleichen Wert zu setzen. Ich dachte, ich verstehe boolesche Indizierung für Pandas, aber ich habe keine Ressourcen zu diesem spezifischen Fehler gefunden.
%Vor% Oben möchte ich alle True
Einträge in der Maske durch den Wert 30
ersetzen.
Ich könnte stattdessen df.replace
verwenden, aber das Maskieren fühlt sich hier ein wenig effizienter und intuitiver an. Kann jemand den Fehler erklären und einen effizienten Weg zur Festlegung aller Werte bieten?
Sie können die boolesche Maske für gemischte dtypes leider nicht dafür verwenden. Sie können pandas where
verwenden, um die Werte zu setzen:
Hinweis: Das obige Verhalten schlägt fehl, wenn Sie inplace=True
in der where
-Methode verwenden, also wird df.where(mask, other=30, inplace=True)
ausgelöst:
TypeError: Inplace-Boolean-Einstellung kann nicht für gemischte Typen mit einem non ausgeführt werden np.nan Wert
BEARBEITEN
OK, nach einem kleinen Missverständnis können Sie where
y immer noch verwenden, indem Sie einfach die Maske invertieren:
Ich bin mir nicht 100% sicher, aber ich vermute, dass die Fehlermeldung auf die Tatsache zurückzuführen ist, dass es keine identische Behandlung von fehlenden Daten über verschiedene dtypes gibt. Nur Float hat NaN, aber Integer können automatisch in Floats umgewandelt werden, so dass es dort kein Problem ist. Aber es scheint Mischnummer dtypes und Objekt dtypes funktioniert nicht so einfach ...
Unabhängig davon könntest du es mit np.where
:
pandas
verwendet NaN
, um ungültige oder fehlende Daten zu markieren und kann typübergreifend verwendet werden, da Ihre DataFrame
als gemischte int und string Datentypen die Zuweisung zu einem einzelnen Typ (außer% co_de) nicht akzeptieren %), da dies einen gemischten Typ (int und str) in NaN
durch eine In-Place-Zuweisung erzeugen würde.
@JohnE Methode, die B
verwendet, erstellt eine neue np.where
, in der der Typ der Spalte DataFrame
ein Objekt und keine Zeichenfolge wie im ersten Beispiel ist.