【问题标题】:Pandas: map values of categorical variable to a predefined list of dummy columnsPandas:将分类变量的值映射到预定义的虚拟列列表
【发布时间】:2014-12-30 17:40:55
【问题描述】:

我有一个具有已知级别的分类变量(例如,hour 仅包含 0 到 23 之间的值),但目前并非所有变量都可用(例如,我们有介于0 点和 11 点,而从 12 点到 23 点的时间不包括在内),但稍后将添加其他值。如果我们天真地使用pandas.get_dummies() 将值映射到指示变量,我们最终将只有 12 个而不是 24 个。有没有办法将分类变量的值映射到 预定义的虚拟变量列表强>?

以下是预期行为的示例:

possible_values = range(24)
hours = get_dummies_on_steroids(df['hour'], prefix='hour', levels=possible_values)

【问题讨论】:

    标签: python pandas dummy-data


    【解决方案1】:

    在 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 的用处。

    【讨论】:

    • 回答的速度是 StackOverflow 上我一直很高兴的地方。谢谢,效果很好!
    • 仅供参考,我认为pd.get_dummies 在这里返回浮点数据类型可能是一个小问题:github.com/pydata/pandas/issues/8725
    • @Jeff:这是非常出乎意料的行为,感谢您的关注!
    • 好吧 categorical 是一种新类型,它有一些边缘情况 - 这将在 0.15.2 中清理(几天后发布 0.15.1)
    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多