【问题标题】:Pandas convert integer zeroes and ones to boolean [duplicate]熊猫将整数零和一转换为布尔值[重复]
【发布时间】:2021-03-06 04:21:42
【问题描述】:

我有一个数据框,其中包含一个 0 和 1 的热编码列,其 dtype 为 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) 的最佳方法是什么?

【问题讨论】:

  • provide the code生成数据框。
  • @MayankPorwal - 是的,如果不是第一列或第二列整数,那么就是欺骗,否则不是。
  • 主要逻辑是骗人的。您可以告诉 OP 分别选择带有 iloc 的前两列。

标签: python pandas


【解决方案1】:

您的第二次尝试非常接近。试试这个

df[df.columns[2:]].applymap(bool)

【讨论】:

    【解决方案2】:

    实际上还有另一种选择,不是最 Pythonic 的。不过我会提供它,如果您想一步将字符串(例如:'Cat' 与 'Dog')转换为布尔值(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
    

    【讨论】:

      【解决方案3】:

      您可以使用DataFrame.iloc 在前 2 之后按位置选择所有列,转换为布尔值并分配回:

      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
      

      【讨论】:

        猜你喜欢
        • 2014-09-03
        • 2019-07-04
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多