Pandas konvertieren ganzzahlige Nullen und Einsen in boolesche [Duplikate]
Ich habe einen Datenrahmen, der eine heißcodierte Spalte mit 0 und 1 enthält, die vom Typ d ist int32
.
a b h1 h2 h3
xy za 0 0 1
ab cd 1 0 0
pq rs 0 1 0
Ich möchte die Spalten h1, h2 und h3 in Boolesche Werte konvertieren.
df[df.columns[2:]].astype(bool)
Dies änderte jedoch alle Werte von h1-h3 als TRUE
.
Ich habe es auch versucht
df[df.columns[2:]].map({0:False, 1:True})
aber das funktioniert auch nicht. (AttributeError: Das Objekt 'DataFrame' hat kein Attribut 'map')
Was ist der beste Weg, um bestimmte Spalten des Datenrahmens von int32
0 und 1 in Boolesche Werte ( True
/ False
) zu konvertieren ?
Antworten
Sie können alle Spalten nach Positionen nach den ersten 2 mit auswählen DataFrame.iloc, in Boolesche Werte konvertieren und zurück zuweisen:
df.iloc[:, 2:] = df.iloc[:, 2:].astype(bool)
print (df)
a b h1 h2 h3
0 xy za False False True
1 ab cd True False False
2 pq rs False True False
Oder erstellen Sie ein Wörterbuch zum Konvertieren von Spaltennamen ohne vorherige 2
:
df = df.astype(dict.fromkeys(df.columns[2:], bool))
print (df)
a b h1 h2 h3
0 xy za False False True
1 ab cd True False False
2 pq rs False True False
Es gibt tatsächlich eine andere Option, nicht die pythonischste. Trotzdem werde ich es bereitstellen, kann nützlich sein, wenn Sie Zeichenfolgen (z. B. 'Cat' versus 'Dog') in einem Schritt in Boolean (False, True) konvertieren möchten:
df = pd.DataFrame({'a':['xy','ab','pq'], 'b':['za','cd','rs'], 'h1':[0,1,0], 'h2':[0,0,1], 'h3':[1,0,0]})
df = df.replace({0:False, 1:True})
Überprüfung auf Datentyp:
df.dtypes
a object
b object
h1 bool
h2 bool
h3 bool
dtype: object
Sie waren mit Ihrem zweiten Versuch ziemlich nah dran. Versuche dies
df[df.columns[2:]].applymap(bool)