这是给那些pd.get_dummies的忠实粉丝们
大家好 🤠
好的,我明白了。在Python中,将分类变量转换为虚拟变量数组最简单的方法之一就是使用Pandas的pd.get_dummies()。为什么要费时间从sklearn中导入OneHotEncoder,执行.fit_transform()等等等等呢?简直太繁琐了!
本文首先介绍一个简单的数据集,用于演示目的。该数据集包含一个测试集,其中包含在训练集中找不到的分类变量。然后,它将演示使用pd.get_dummies()可能会导致演示数据出现问题。最后,展示如何使用sklearn的OneHotEncoder避免这个问题。

一个简单的演示数据集
这里有一个简单的数据集,包含一个名为OS的分类特征。OS列列出了计算机操作系统。我们将使用这个虚构的数据进行演示。在train_df中是虚构的演示训练数据。而在test_df中,我们有虚构的演示测试数据。
在我们虚构的演示案例中,测试集包含在训练集中不存在的分类值。这种不匹配将导致问题。
import pandas as pdtrain_df = pd.DataFrame({'OS': ['Windows', 'MacOS', 'Linux', 'Windows', 'MacOS']})test_df = pd.DataFrame({'OS': ['Windows', 'MacOS', 'Android', 'Unix' 'iOS']})
在我们的训练数据中,我们有三个操作系统:Windows,MacOS和Linux。但在我们的测试数据中,我们还有额外的类别,包括Android,Unix和iOS。
在train_df.get_dummies()上拟合的模型将无法与test_df.get_dummies()中的测试数据一起使用。结果不匹配。

pd.get_dummies的问题
在将pd.get_dummies()函数应用于我们的训练和测试数据集时,你将得到以下结果。