下面哪种python代码可以有效地将yes\u no类型的分类变量转换为1-0编码?

下面哪种python代码可以有效地将yes\u no类型的分类变量转换为1-0编码?,python,pandas,dataframe,encoding,data-cleaning,Python,Pandas,Dataframe,Encoding,Data Cleaning,考虑到性能、有效性和其他参数,下面哪种代码更适合将分类是/否变量转换为一/零变量 代码1: variable_list = ['Column1','Column2','Column3'] yes_no = {'Yes':1,'No':0} for i in variable_list: df[i]=df[i].map(yes_no) 代码2: variable_list = ['Column1','Column2','Column3'] def binary_map(x):

考虑到性能、有效性和其他参数,下面哪种代码更适合将分类是/否变量转换为一/零变量

代码1:

variable_list = ['Column1','Column2','Column3']

yes_no = {'Yes':1,'No':0}

for i in variable_list:
    df[i]=df[i].map(yes_no)
代码2:

variable_list = ['Column1','Column2','Column3']

def binary_map(x):
    return x.map({'Yes':1,'No':0})

df[variable_list]=df[variable_list].apply(binary_map)

虽然我知道您特别询问了两种方法的性能,但我觉得让大家知道Pandas附带了一个将数据转换为分类数据的工具是很有用的。一旦数据转换为分类数据,您就可以访问分类代码

让我们制作一个示例数据帧:

In [23]: import pandas as pd
    ...: columns=['Column1', 'Column2', 'Column3']
    ...: df = pd.DataFrame([['Yes', 'No', 'Yes'], ['No', 'Yes', 'No'], ['Yes', 'No', 'No']], columns=columns)
如果我们使用
.dtypes
查看数据,我们会看到数据当前存储为
对象的集合

In [22]: df.dtypes
Out[22]: 
Column1    object
Column2    object
Column3    object
dtype: object
使用Pandas的内置
.astype()
函数,我们可以将所有列转换为一个类别数据类型。同样,使用
.dtypes
我们现在可以看到数据类型显示为
类别

In [24]: df[columns] = df[columns].astype('category')
    ...: df.dtypes
    ...: 
Out[24]: 
Column1    category
Column2    category
Column3    category
dtype: object
由于我们的数据存储为
类别
数据类型,因此我们可以引用
.cat.codes
属性来访问每个元素的类别代码。由于
.cat.codes
是一个系列级属性(而不是数据帧级属性),我们需要循环遍历每一列并逐列进行转换

In [25]: for col in columns:
    ...:     df[col] = df[col].cat.codes
    ...:
这将生成一个充满数值的数据帧

In [26]: df
Out[26]: 
   Column1  Column2  Column3
0        1        0        1
1        0        1        0
2        1        0        0

如果该列中只有“是”或“否”值,则可以使用布尔条件<代码>(df[变量列表]=='是)。astype(int)