【问题标题】:Dummy variables when not all categories are present across multiple features & data sets当并非所有类别都存在于多个特征和数据集中时的虚拟变量
【发布时间】:2018-08-19 13:01:19
【问题描述】:

我想询问this question 的扩展,它谈到了为缺失的类添加标签以确保虚拟对象被正确编码为空白。

有没有办法在多组数据中自动执行此操作并让标签在两者之间自动同步? (即用于测试和训练集)。 IE。相同的列,但每列中表示的数据类别不同?

例如: 假设我有以下两个数据框:

df1 = pd.DataFrame.from_items([('col1', list('abc')), ('col2', list('123'))])
df2 = pd.DataFrame.from_items([('col1', list('bcd')), ('col2', list('234'))])   

df1
   col1   col2 
1   a     1
2   b     2    
3   c     3
df2
   col1    col2
1   b      2
2   c      3
3   d      4

我想拥有:

df1
    col1_a col1_b col1_c col1_d col2_1 col2_2 col2_3 col2_4
1   1      0      0      0      1      0      0      0      
2   0      1      0      0      0      1      0      0
3   0      0      1      0      0      0      1      0

df2
    col1_a col1_b col1_c col1_d col2_1 col2_2 col2_3 col2_4
1   0      1      0      0      0      1      0      0
2   0      0      1      0      0      0      1      0
3   0      0      0      1      0      0      0      1

无需提前指定
col1_labels = ['a', 'b', 'c', 'd'], col2_labels = ['1', '2', '3', '4']

我可以一次系统地为许多列执行此操作吗?我在想象一个功能,当传入两个或多个数据帧时(假设所有列都相同):

  1. 读取 pandas 数据框中的哪些列是类别
  2. 找出总体标签是什么
  3. 然后为每一列提供类别标签 这看起来对吗?有没有更好的方法?

【问题讨论】:

    标签: python pandas machine-learning dummy-variable


    【解决方案1】:

    如果Dataframes 中的分类列名称相同,我认为您需要 reindex 合并所有列:

    print (df1)  
      df1
    1   a
    2   b
    3   c
    
    print (df2)
      df1
    1   b
    2   c
    3   d
    
    df1 = pd.get_dummies(df1)
    df2 = pd.get_dummies(df2)
    
    union = df1.columns | df2.columns
    df1 = df1.reindex(columns=union, fill_value=0)
    df2 = df2.reindex(columns=union, fill_value=0)
    print (df1)
       df1_a  df1_b  df1_c  df1_d
    1      1      0      0      0
    2      0      1      0      0
    3      0      0      1      0
    print (df2)
       df1_a  df1_b  df1_c  df1_d
    1      0      1      0      0
    2      0      0      1      0
    3      0      0      0      1
    

    【讨论】:

    • 这太棒了!我在 df 的多个列上对此进行了测试,它仍然运行良好,将更新问题以反映我实际尝试做的事情
    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 2023-03-22
    • 2022-01-23
    • 2020-02-02
    • 2017-02-26
    • 2022-11-20
    • 1970-01-01
    相关资源
    最近更新 更多