如何将数据框中的真假值转换为 1 为真,0 为假

Posted

技术标签:

【中文标题】如何将数据框中的真假值转换为 1 为真,0 为假【英文标题】:How to convert true false values in dataframe as 1 for true and 0 for false 【发布时间】: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

【问题讨论】:

【参考方案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 计算,使其直观。

【讨论】:

以上是关于如何将数据框中的真假值转换为 1 为真,0 为假的主要内容,如果未能解决你的问题,请参考以下文章

c++ bool

javascript字符串真假判断

JavaScript的循环语句都有哪些?

JS循环

内置函数讲解

&与&&|与||的区别