pandas DataFrame legt den Wert für die boolesche Maske fest

8

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?

    
Michael K 29.05.2015, 00:14
quelle

3 Antworten

10

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:

%Vor%

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:

%Vor%     
EdChum 29.05.2015, 07:47
quelle
3

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 :

ziemlich leicht umgehen %Vor%     
JohnE 29.05.2015 02:45
quelle
1

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.

    
Paul Joireman 29.05.2015 03:13
quelle

Tags und Links