約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があります
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)
単一の列の場合、これまでで最も簡単な方法は、列タイプを変換することです。 Pandasは、ブール値をintに正しくマップするのに十分賢いです。
df.column_name = df.column_name.astype(int)
Df.column_nameがBoolean
で始まる場合、タイプint
に変換すると、0と1になります。
データフレームの各列で.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の乗算を使用すると、簡単に実行できます。これを実行すると、すべてのデータフレームが変換されます。
df*1
int(True)
または
int(1==1)
またはラムダで使用する:
ラムダx:int(x)
Trueは1になり、Falseは0になり、-1は-1になります。