下面哪种python代码可以有效地将yes\u no类型的分类变量转换为1-0编码?
考虑到性能、有效性和其他参数,下面哪种代码更适合将分类是/否变量转换为一/零变量 代码1:下面哪种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):
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)