如何将数据帧中的真假值转换为1表示为true,0表示为false

时间:2015-04-30 06:40:39

标签: python pandas dataframe boolean

如何将Dataframe中的真假值转换为1表示为true,0表示为false

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


OUTPUT
12   1  14 0
13   0  13 1

12 个答案:

答案 0 :(得分:19)

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

df['COL2'] == 'TRUE'

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

0

要使用新的(df['COL2'] == 'TRUE').astype(int) 列替换旧字符串列,只需指定它:

int

要做到两个列在一个,只需索引一列列:

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

答案 1 :(得分:9)

只需这样做:

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

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

答案 2 :(得分:1)

您可以将每列的类型转换为

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)适用于转化。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

这不起作用:

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

这有效:

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

答案 6 :(得分:0)

您也可以尝试将布尔值(如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

答案 7 :(得分:0)

您可以将'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

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

答案 8 :(得分:0)

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

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 :(得分:0)

您可以尝试以下方法:

script

答案 10 :(得分:0)

一种简单而干净的方法是使用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)

就像一个魅力一样工作,并且与Excel女士的计算非常相似,使其变得直观。

答案 11 :(得分:0)

使用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