如何用numpy对数据进行单热编码?

时间:2017-11-15 04:59:00

标签: python arrays csv numpy one-hot-encoding

假设我有一个数据集

sex    age hours
female 23  900
male   19  304
female 42  222
      ...

如果我使用np.loadtxt或np.genfromtxt,我可以使用转换器作为为性别列中的每个分类数据分配值的方法。有没有办法在加载过程中创建一个热门列?如果没有,我应该在哪里完成这个?

3 个答案:

答案 0 :(得分:3)

使用pandas,您可以传递类别dtype(以便宜的方式加载列):

In [11]: df = pd.read_csv("my_file.csv", dtype={"sex": "category"})

In [12]: df
Out[12]:
      sex  age  hours
0  female   23    900
1    male   19    304
2  female   42    222

In [13]: df.dtypes
Out[13]:
sex      category
age         int64
hours       int64
dtype: object

获得类别后,您可以使用get_dummies

In [21]: pd.get_dummies(df.sex)
Out[21]:
   female  male
0       1     0
1       0     1
2       1     0

In [22]: pd.get_dummies(df.sex.cat.codes)
Out[22]:
   0  1
0  1  0
1  0  1
2  1  0

答案 1 :(得分:0)

答案 2 :(得分:0)

以下是genfromtxt方法:

import numpy as np

def hot(s):
    rec = np.genfromtxt(s, dtype="i8,i4,i4", skip_header=1,
                        converters={0:{b'male':1<<32, b'female':1}.__getitem__})
    return rec.view(np.int32).reshape((-1, 4))

print(hot(<your_file_name>))

说明:我认为转换器需要返回单个值。为了得到两个,我们给第一列一个双倍宽度dtype,并且视图投射得到的重新排列。