python - Pandas:在 One-Hot 编码中将 NaN 视为看不见的值
问题描述
我有一个训练集,用于构建一些机器学习模型,我需要设置一些代码来预测测试集(我无权访问)。
例如,如果我有一个 DataFrame train
,:
car
0 Audi
1 BMW
2 Mazda
我可以pd.get_dummies
用来获得:
car_Audi car_BMW car_Mazda
0 1 0 0
1 0 1 0
2 0 0 1
调用这个生成的 DataFrame,train_encoded
现在,假设我的test
DataFrame 如下所示:
car
0 Mercedes
我可以用:
pd.get_dummies(test).reindex(columns=train_encoded.columns)
要得到:
car_Audi car_BMW car_Mazda
0 0 0 0
我怎样才能将NaN
s 视为我的列的看不见的值car
?也就是说,如果我NaN
在我的car
专栏中遇到 in test
,我想回来:
car_Audi car_BMW car_Mazda
0 0 0 0
谢谢!
解决方案
如果您生成了一个filler
未出现在 中的字符串,df.car
那么,稍微修改一下文在评论中的建议(对于 中'NAN'
的字符串的情况df.car
),您可以使用
df.car.fillna(filler, inplace=True)
pd.get_dummies(test).reindex(columns=train_encoded.columns)
如果您可以提前filler
访问所有内容,则一种定义方法是通过df.car
filler = '_' + ''.join(df.car.unique())
因为它至少比其中最长的字符串长 1。另一种方法是使用随机字符串
filler = ''.join(random.choice(string.ascii_lowercase) for _ in range(10))
您拥有此类物品的概率小于len(df) / 26 ** 10
。
推荐阅读
- ios - 使用 UnwantedCommunicationReportingExtension 时如何设置 ILClassificationResponse 的内容?
- haskell - 如何通过 foldMap 计算可折叠的浮点属性的最大值?
- algorithm - 给定一个大小为 MxN 且具有正整数值的二维矩阵,找到总和最大的闭环
- c# - 将复选框列表绑定到 MVC 上的编辑视图?
- nuget - 如何使用 VS 15.7 及更高版本调试没有 WIP 功能的 nuget 包
- python - Python中文本文件的条件分块
- php - Codeigniter 强制下载 CSV 防止自动格式化删除前导零
- r - 根据每个类别 R 中的计数从多个数据框列创建条形图
- php - apache/.htaccess:不正确的页面不会重定向到自定义 404
- javascript - 如何在Webdriverjs Javascript Nodejs ActionSequence中使用ActionSequence进行动作链?