Skip to main content
 首页 » 编程设计

python之Pandas:将分类变量的值映射到预定义的虚拟列列表

2025年05月04日16Renyi-Fan

我有一个具有已知水平的分类变量(例如,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 的用武之地。