如何将数据框中的真假值转换为 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'
,您可以将它们转换为布尔值 True
和 False
,如下所示:
df['COL2'] == 'TRUE'
这会给你一个bool
列。您可以使用astype
转换为int
(因为bool
是一个整数类型,其中True
表示1
和False
表示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 打印为 TRUE
和 FALSE
,那必须是字符串 '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 为假的主要内容,如果未能解决你的问题,请参考以下文章