【问题标题】:How to convert true false values in dataframe as 1 for true and 0 for false如何将数据框中的真假值转换为 1 为真,0 为假
【发布时间】:2015-07-09 17:49:06
【问题描述】:

如何将 Dataframe 中的真假值转换为 1 为真,0 为假

COL1  COL2 COL3  COL4
12   TRUE  14    FALSE
13   FALSE  13    TRUE


OUTPUT
12   1  14 0
13   0  13 1

【问题讨论】:

    标签: python pandas dataframe boolean


    【解决方案1】:

    首先,如果您有字符串 'TRUE''FALSE',您可以将它们转换为布尔值 TrueFalse,如下所示:

    df['COL2'] == 'TRUE'
    

    这会给你一个bool 列。您可以使用astype 转换为int(因为bool 是一个整数类型,其中True 表示1False 表示0,这正是您想要的):

    (df['COL2'] == 'TRUE').astype(int)
    

    要用这个新的int 列替换旧的字符串列,只需分配它:

    df['COL2'] = (df['COL2'] == 'TRUE').astype(int)
    

    要同时对两列执行此操作,只需使用列列表进行索引:

    df[['COL2', 'COL4']] = (df[['COL2', 'COL4']] == 'TRUE').astype(int)
    

    【讨论】:

      【解决方案2】:

      只需这样做:

      df[["col2", "col4"]] *= 1
      

      Python 分别考虑布尔值 (True, False),例如 (1, 0)。 所以你可以像数字一样操作它。

      【讨论】:

        【解决方案3】:

        你可以像这样转换每一列的类型

        In [7]: df[['COL2', 'COL4']] = df[['COL2', 'COL4']].astype(int)
        
        In [8]: df
        Out[8]:
           COL1  COL2  COL3  COL4
        0    12     1    14     0
        1    13     0    13     1
        

        即使df[['COL2', 'COL4']].astype(float) 也适用于转换。

        【讨论】:

        • 这只是要提高ValueError: invalid literal for int() with base 10: 'TRUE'
        • 它在'0.14.0' @abarnert 上为我工作,因此我粘贴了控制台输出。新版本会抛出这个错误吗?啊,我想,我已经将初始 True/False 作为布尔值而不是字符串!
        • 是的,他的问题并不完全清楚,但如果他的 DF 打印为 TRUEFALSE ,那必须是字符串 'TRUE''FALSE' (或其他谁的代表看起来像那样,也许)。
        【解决方案4】:

        假设d 是您要转换的数据框

        f = lambda x: 1 if x==True else 0
        

        d.applymap(f) 应该是你想要的。

        【讨论】:

          【解决方案5】:

          这不起作用:

          df['COL2'] = (df['COL2'] == 'TRUE').astype(int)
          

          这行得通:

          df['COL2'] = (df['COL2'] == True ).astype(int)
          

          【讨论】:

            【解决方案6】:
            df=pd.DataFrame(data={'col1' : [True, False, True],
                             'col2': [14, 15, 12],
                             'col3': [False, True, True]})
            df[['col1', 'col3']]=df[['col1', 'col3']].astype('int')
            df
            
            Output:
                col1    col2    col3
            0   1        14      0
            1   0        15      1
            2   1        12      1
            

            【讨论】:

              【解决方案7】:

              您可以尝试以下方法:

              variable_name = {'True' : 0 , 'False' : 1 }
              
              data['Column_name'] = data['Column_name'].map(Variable_name)
              

              【讨论】:

                【解决方案8】:

                如果您的数据中有分类列(例如国家/地区名称).astype(int) 将返回错误 更好的选择是将数据乘以 1

                data = pd.read_csv('data.txt', header = None) 
                data *= 1 # make true/false -> 1/0
                print(data)
                

                如果你有

                True False USA
                False False USA
                True True russia
                

                结果是

                1 0 USA
                0 0 USA
                1 1 USA
                

                【讨论】:

                  【解决方案9】:

                  使用 pandas.DataFrame.replace

                  >>> df
                  
                     COL1   COL2  COL3   COL4
                  0    12   TRUE    14  FALSE
                  1    13  FALSE    13   TRUE
                  
                  >>> df.replace(['TRUE','FALSE'],[1,0])
                  
                     COL1  COL2  COL3  COL4
                  0    12     1    14     0
                  1    13     0    13     1
                  

                  【讨论】:

                    【解决方案10】:

                    您也可以尝试将 True 或 False 等布尔值转换为 1 或 0。

                        In [2] : df['attribute_name']
                        Out[2] : 0 True
                                 1 False
                                 2 True
                                 3 True
                    

                    现在导入这些包:

                        In [3] : from sklearn import preprocessing
                                 lab_enc = preprocessing.LabelEncoder()
                                 lab_enc.fit(df['attribute_name'])
                                 variable = lab_enc.transform(df['attribute_name'])
                                 df['variable'] = variable
                                 print df['variable']
                        Out[4] : 0 1
                                 1 0
                                 2 1
                                 3 1
                    

                    如果要将值从 0 或 1 恢复为 False 或 True,您可以使用 lab_encoder.inverse_transform([0,1]) 将输出从 0 或 1 恢复为 False 或 True

                    【讨论】:

                      【解决方案11】:

                      您可以将 'True''False' 值(字符串)转换为 1 和 0 分别对应特定的(这里我们选择第 3 列),如下所示。

                      from pandas import DataFrame as df
                      data = df(data) # where data contains your data as rows and columns
                                      # and it is converted to dataframe using pandas (ignore if already df)
                      for i in range(len(data[3])):
                          if data[3][i] == 'TRUE':
                              data[3][i] = 1
                          elif data[3][i] == 'FALSE':
                              data[3][i] = 0
                          else:
                              pass
                      

                      此方法可用于比较任何值或字符串,并将该位置替换为所需的值或字符串。

                      【讨论】:

                        【解决方案12】:

                        一个简单而干净的方法是使用numpy's where函数

                        df['Y'] = np.where(df['X'] == "SOME_VALUE", 1, 0)
                        

                        将在内部计算 True/False 值并将其替换为 1/0,从而创建一个由 1 和 0 组成的数组。

                        同样,

                        df['Y'] = np.where((df['X'] == "SOME_VALUE") & (df['Z'] == "SOME_VALUE"), 100, 0)
                        

                        工作起来就像一个魅力,非常类似于 Ms Excel 计算,使其直观。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2016-02-29
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2020-01-05
                          • 2011-09-22
                          相关资源
                          最近更新 更多