web-dev-qa-db-ja.com

混合データ型のデータフレームで発生するすべてのTrue / Falseを1/0に変換する

約100列のデータフレームがあります。ブール列と文字がいくつかあります。 True/Falseおよび-1の値を持つすべてのブール値を1/0に置き換えたいと思います。単一の列ではなく、データフレーム全体に適用したいと思います。

ここで、列を整数に変換するなど、いくつかの解決策を見ました。しかし、私は何百もの列を通過する練習を避けたいと思います。

これが私が失敗したものです:

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

しかし、データフレームテストにはまだTrue/Falseがあります

7
muni

applymapはデフォルトではインプレースではなく、新しいデータフレームを返します。

正しい方法:

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

または

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

または単に

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


replaceはこれを達成するための最良の方法のようですが:

test.replace(False, 0, inplace=True)
11
DeepSpace

単一の列の場合、これまでで最も簡単な方法は、列タイプを変換することです。 Pandasは、ブール値をintに正しくマップするのに十分賢いです。

df.column_name = df.column_name.astype(int)

Df.column_nameがBooleanで始まる場合、タイプintに変換すると、0と1になります。

4
Richard

データフレームの各列で.replace()をループする関数を定義します。

def replace_boolean(data):
    for col in data:
        data[col].replace(True, 1, inplace=True)
        data[col].replace(False, 0, inplace=True)

replace_boolean(test)
1
Johnny Yiu

1の乗算を使用すると、簡単に実行できます。これを実行すると、すべてのデータフレームが変換されます。

df*1
0
Bruno Benevides
int(True) 

または

int(1==1)

またはラムダで使用する:

ラムダx:int(x)

Trueは1になり、Falseは0になり、-1は-1になります。

0
L. Astola