这是给那些pd.get_dummies的忠实粉丝们
大家好 🤠
好的,我明白了。在Python中,将分类变量转换为虚拟变量数组最简单的方法之一就是使用Pandas的pd.get_dummies()
。为什么要费时间从sklearn中导入OneHotEncoder
,执行.fit_transform()
等等等等呢?简直太繁琐了!
本文首先介绍一个简单的数据集,用于演示目的。该数据集包含一个测试集,其中包含在训练集中找不到的分类变量。然后,它将演示使用pd.get_dummies()
可能会导致演示数据出现问题。最后,展示如何使用sklearn的OneHotEncoder
避免这个问题。
![Pd.Get_Dummies的好坏与丑陋 四海 第1张-四海吧 图片来源:作者使用Canva中的文本转图片功能绘制的插图。提示:“三只穿着西部牛仔服装的熊猫。”](https://miro.medium.com/v2/resize:fit:640/format:webp/1*HALimVGptodJt8TziSKVVA.png)
一个简单的演示数据集
这里有一个简单的数据集,包含一个名为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的好坏与丑陋 四海 第2张-四海吧 图片来源:作者使用Canva创作的插图,使用Canva库中的图片素材。一个艺术用品模型。](https://miro.medium.com/v2/resize:fit:640/format:webp/1*fhY68eUCdHVp224_veDNzw.png)
pd.get_dummies的问题
在将pd.get_dummies()
函数应用于我们的训练和测试数据集时,你将得到以下结果。