パンダは整数の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'がありません)

データフレームの特定の列をint320と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)