这种一键式编码有什么问题?

时间:2018-09-21 09:01:54

标签: pandas numpy

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 个答案:

答案 0 :(得分:2)

如果得到:

  

KeyError:'排名'

这意味着没有列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