パンダは整数の0と1をブール値に変換します[重複]
Nov 23 2020
dtypeの0と1のホットエンコードされた列を1つ含むデータフレームがありますint32
。
a b h1 h2 h3
xy za 0 0 1
ab cd 1 0 0
pq rs 0 1 0
列h1、h2、h3をブール値に変換したいので、これが私がしたことです。
df[df.columns[2:]].astype(bool)
しかし、これにより、h1-h3のすべての値がとして変更されましたTRUE
。
私も試しました
df[df.columns[2:]].map({0:False, 1:True})
しかし、それも機能しません。(AttributeError: 'DataFrame'オブジェクトには属性 'map'がありません)
データフレームの特定の列をint32
0と1からブール値(True
/ False
)に変換する最良の方法は何ですか?
回答
2 jezrael Nov 23 2020 at 19:42
最初の2の後の位置ですべての列を選択しDataFrame.iloc、ブール値に変換して、次のように割り当てることができます。
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
または、最初に列名を変換するための辞書を作成します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
3 RuthgerRighart Nov 23 2020 at 20:07
実際には、ほとんどのPythonicではなく、別のオプションがあります。それでも、私はそれを提供します。文字列(例:「Cat」と「Dog」)を1つのステップでブール値(False、True)に変換する場合に役立ちます。
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})
データ型の確認:
df.dtypes
a object
b object
h1 bool
h2 bool
h3 bool
dtype: object
1 Arpan Nov 23 2020 at 19:59
あなたは2回目の試みにかなり近かった。これを試して
df[df.columns[2:]].applymap(bool)