2016-07-21 4 views
0

Ich habe ein Datenframe, das etwa 100 Spalten hat, Es gibt einige boolesche Spalten und einige Zeichen. Ich möchte alle booleschen Werte mit den Werten True/False und -1 mit 1/0 ersetzen. Ich möchte es auf den gesamten Datenrahmen anstatt auf eine einzelne Spalte anwenden.Konvertieren aller Vorkommen von True/False in 1/0 in einem Datenrahmen mit gemischtem Datentyp

Ich sah hier einige Lösungen, wie die Spalte in Ganzzahl umwandeln. Aber ich möchte die Übung vermeiden, durch 100 Spalten zu gehen.

Hier ist etwas, was ich erfolglos versucht:

test.applymap(lambda x: 1 if x=='True' else x) 
test.applymap(lambda x: 0 if x=='False' else x) 

Aber der Test Datenrahmen hat noch Wahr/Falsch

+0

'x' kann gleich' True' sein, nicht '' True''. Trotzdem müssen Sie den Spaltentyp zuerst konvertieren. Speichern von '1' in einem booleschen Feld speichert nur' True'. –

Antwort

2

applymap ist nicht an Ort und Stelle standardmäßig wird wieder einen neuen Datenrahmen.

Der richtige Weg:

test = test.applymap(lambda x: 1 if x == True else x) 
test = test.applymap(lambda x: 0 if x == False else x) 

oder

test = test.applymap(lambda x: 1 if x == True else x).test.applymap(lambda x: 0 if x=='False' else x) 

oder einfach

test.applymap(lambda x: 1 if x == True else x, inplace=True) 
test.applymap(lambda x: 0 if x == False else x, inplace=True) 


Obwohl replace das scheint Der beste Weg, dies zu erreichen:

test.replace(False, 0, inplace=True) 
+0

möglicherweise weil, wenn ich fillna anwendete, es den Datentyp von boolean zu int64 umwandelte. Weil alle diese Spalten aktuell den Datentyp int64 haben. – muni

Verwandte Themen