问题:
我在一个特征比测试数据多的数据集上训练了一个分类器。例如,我的原始数据集一周中有 7 天:周一至周日,而在测试数据集中,每个观察都恰好在周四(因此我少了 6 个特征)。因此,当我运行 时
predict()
,我收到一个错误,即功能数量不匹配。这些缺失的功能不是使用创建的功能get_dummies()
:
Day_of_the_week_is_monday, Day_of_the_week_is_tuesday, ...
理想情况下,我想执行数据清理并执行以下操作:
可重现的例子
dataframe = pd.DataFrame({
'Result' : np.array([1,2,2,10,100],dtype='int32'),
'Day_of_the_week' : pd.Categorical(["Monday","Tuesday","Wednesday","Thursday","Friday"]),})
dataframe_dummies = pd.get_dummies(dataframe, prefix=['Day_of_the_week_is'])
### get subset dataframe
dataframe_subset = pd.DataFrame({
'Result' : np.array([1,2,2,10],dtype='int32'),
'Day_of_the_week' : pd.Categorical(["Thursday","Thursday","Thursday","Saturday"]),})
dataframe_subset_dummies = pd.get_dummies(dataframe_subset, prefix=['Day_of_the_week_is'])
主要数据集如下所示:
Result Is_Friday Is_Monday Is_Thursday Is_Tuesday Is_Wednesday
0 1 0 1 0 0 0
1 2 0 0 0 1 0
2 2 0 0 0 0 1
3 10 0 0 1 0 0
4 100 1 0 0 0 0
子集数据框
Result Day_is_Saturday Day_is_Thursday
0 1 0 1
1 2 0 1
2 2 0 1
3 10 1 0
必须做的事情:
1)删除is_Saturday,因为它不在原始数据中。
2) 添加剩余的填充为 0 的列。
我可以手动做,但是做起来好像很麻烦。有没有可以为我做到这一点的功能?例如,扩展子集数据框以匹配主数据集,或删除列以匹配主数据?
一个简单的循环和检查应该可以添加缺失的列和删除缺失的列:
In [16]: a = pd.DataFrame([[1,2,3],[2,3,4]], columns=['A', 'B', 'E'])
In [17]: b = pd.DataFrame([[3,4,5],[4,5,6]], columns=['A', 'B', 'C'])
In [18]: for col in b.columns:
...: if col not in a:
...: a[col] = 0
...:
In [19]: for col in a.columns:
...: if col not in b:
...: del a[col]
...:
In [20]: a
Out[20]:
A B C
0 1 2 0
1 2 3 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句