假设我有一个数据集
sex age hours
female 23 900
male 19 304
female 42 222
...
如果我使用np.loadtxt或np.genfromtxt,我可以使用转换器作为为性别列中的每个分类数据分配值的方法。有没有办法在加载过程中创建一个热门列?如果没有,我应该在哪里完成这个?
答案 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)
查看pandas.get_dummies
功能。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html
答案 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,并且视图投射得到的重新排列。