如何在 Pandas 中将分类变量转换为数值?
在本文中,我们将学习如何使用 pandas 将分类变量转换为数值。
当我们查看分类数据时,任何人都会想到的第一个问题是如何处理这些数据,因为机器学习总是擅长处理数值。我们可以使用文本数据制作机器学习模型。因此,为了制作预测模型,我们必须将分类数据转换为数字形式。
方法一:使用replace()方法
替换是将分类术语转换为数字的方法之一。例如,我们将根据受教育程度获取人们的工资数据集。这是分类变量的序数类型。我们会将他们的教育水平转换为数字项。
Syntax:
replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method=’pad’)
考虑给定的数据:
Python3
#import pandas
import pandas as pd
# read csv file
df = pd.read_csv('data.csv')
# replacing values
df['Education'].replace(['Under-Graduate', 'Diploma '],
[0, 1], inplace=True)
Python3
#import pandas
import pandas as pd
# read csv
df = pd.read_csv('salary.csv')
# get the dummies and store it in a variable
dummies = pd.get_dummies(df.Education)
# Concatenate the dummies to original dataframe
merged = pd.concat([df, dummies], axis='columns')
# drop the values
merged.drop(['Education', 'Under-Graduate'], axis='columns')
# print the dataframe
print(merged)
输出:
在上述程序中,我们将“本科”替换为 0,将“文凭”替换为 1。
方法 2:使用get_dummies()
替换值并不是转换它们的最有效方法。 Pandas 提供了一个名为get_dummies的方法,该方法将返回虚拟变量列。
Syntax: pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
逐步实施
第 1 步:创建虚拟列
调用 get_dummies() 方法并给出列的参数名称。此方法将返回虚拟变量列。在这种情况下,我们有 3 种类型的分类变量,所以它返回了三列
第 2 步:连接
Syntax: pandas.concat(objs, axis=0, join=’outer’, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True
下一步是将虚拟列连接到数据框中。在 pandas 中,有一个 concat() 方法,您可以调用该方法来连接两个数据框。您应该为它提供两个数据框的名称和轴。这将为您提供合并的数据框。
第 3 步:删除列
我们必须删除原始的“教育”列,因为我们有虚拟变量列,我们不需要文本列。我们也可能会删除其中一个虚拟变量列,这样我们就可以避免可能会弄乱模型的虚拟变量陷阱。删除列后,获得所需的数据帧
我们将在代码中实现它
Python3
#import pandas
import pandas as pd
# read csv
df = pd.read_csv('salary.csv')
# get the dummies and store it in a variable
dummies = pd.get_dummies(df.Education)
# Concatenate the dummies to original dataframe
merged = pd.concat([df, dummies], axis='columns')
# drop the values
merged.drop(['Education', 'Under-Graduate'], axis='columns')
# print the dataframe
print(merged)
输出: