代码之家  ›  专栏  ›  技术社区  ›  user697911

这个热编码有什么问题?

  •  1
  • user697911  · 技术社区  · 7 年前
    In [4]: data = pd.read_csv('student_data.csv')
    
    In [5]: data[:10]
    Out[5]: 
       admit  gre   gpa  rank
    0      0  380  3.61     3
    1      1  660  3.67     3
    2      1  800  4.00     1
    3      1  640  3.19     4
    4      0  520  2.93     4
    5      1  760  3.00     2
    6      1  560  2.98     1
    7      0  400  3.08     2
    8      1  540  3.39     3
    9      0  700  3.92     2
    
    one_hot_data = pd.get_dummies(data['rank'])
    
    # TODO: Drop the previous rank column
    data = data.drop('rank', axis=1)
    data = data.join(one_hot_data)
    # Print the first 10 rows of our data
    data[:10]
    

    它总是出错:

    KeyError: 'rank'
    
    During handling of the above exception, another exception occurred:
    
    KeyError                                  Traceback (most recent call last)
    <ipython-input-25-6a749c8f286e> in <module>()
          1 # TODO:  Make dummy variables for rank
    ----> 2 one_hot_data = pd.get_dummies(data['rank'])
          3 
          4 # TODO: Drop the previous rank column
          5 data = data.drop('rank', axis=1)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    如果得到:

    keyror:'等级'

    意思是没有柱子 rank . 显然,问题在于跟踪空白或编码。

    print (data.columns.tolist())
    ['admit', 'gre', 'gpa', 'rank']
    

    您的解决方案应简化为 DataFrame.pop -它选择列并从原始列中删除 DataFrame :

    data = data.join(pd.get_dummies(data.pop('rank')))
    # Print the first 10 rows of our data
    print(data[:10])
       admit  gre   gpa  1  2  3  4
    0      0  380  3.61  0  0  1  0
    1      1  660  3.67  0  0  1  0
    2      1  800  4.00  1  0  0  0
    3      1  640  3.19  0  0  0  1
    4      0  520  2.93  0  0  0  1
    5      1  760  3.00  0  1  0  0
    6      1  560  2.98  1  0  0  0
    7      0  400  3.08  0  1  0  0
    8      1  540  3.39  0  0  1  0
    9      0  700  3.92  0  1  0  0