如何将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
答案 0 :(得分:19)
首先,如果您有字符串'TRUE'
和'FALSE'
,则可以将这些字符串转换为布尔值True
和False
,如下所示:
df['COL2'] == 'TRUE'
这会为您提供bool
列。您可以使用astype
转换为int
(因为bool
是一个整数类型,其中True
表示1
而False
表示{{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