我有一个具有已知水平的分类变量(例如,hour,它只包含 0 到 23 之间的值),但不是所有的现在都可用(比如,我们有 0 点到 11 点之间的测量值,但不包括 12 点到 23 点之间的时间),尽管稍后将添加其他值。如果我们天真地使用 pandas.get_dummies() 将值映射到指示变量,我们最终将只有 12 个而不是 24 个。有没有办法将分类变量的值映射到 < strong>虚拟变量的预定义列表?
这是预期行为的示例:
possible_values = range(24)
hours = get_dummies_on_steroids(df['hour'], prefix='hour', levels=possible_values)
请您参考如下方法:
在 pandas 0.15 中使用新的和改进的 Categorical 类型:
import pandas as pd
import numpy as np
df = pd.DataFrame({'hour': [0, 1, 3, 8, 13, 14], 'val': np.random.randn(6)})
df
Out[4]:
hour val
0 0 -0.098287
1 1 -0.682777
2 3 1.000749
3 8 -0.558877
4 13 1.423675
5 14 1.461552
df['hour_cat'] = pd.Categorical(df['hour'], categories=range(24))
pd.get_dummies(df['hour_cat'])
Out[6]:
0 1 2 3 4 5 6 7 8 9 ...
0 1 0 0 0 0 0 0 0 0 0 ...
1 0 1 0 0 0 0 0 0 0 0 ...
2 0 0 0 1 0 0 0 0 0 0 ...
3 0 0 0 0 0 0 0 0 1 0 ...
4 0 0 0 0 0 0 0 0 0 0 ...
5 0 0 0 0 0 0 0 0 0 0 ...
您描述的情况,您知道您的数据可以采用一组特定的值,但是 您不一定观察到所有这些,这正是 Categorical 的用武之地。
