Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何矢量化分类数据_Python_Scikit Learn_Sklearn Pandas - Fatal编程技术网

Python 如何矢量化分类数据

Python 如何矢量化分类数据,python,scikit-learn,sklearn-pandas,Python,Scikit Learn,Sklearn Pandas,我想对一些分类数据进行矢量化,以构建训练和测试矩阵 我有85个城市,我想得到一个282520行的矩阵,每一行都是向量 [1 0 0 ..., 0 0 0] 我希望每行有一个向量,根据城市的不同,向量为1或0,因此每个城市都应该是一列: print(df['city']) 0圣地亚哥大都市酒店 圣地亚哥大都会1号 圣地亚哥大都市2号 圣地亚哥大都会3号酒店 4柯昆博 5圣地亚哥 6圣地亚哥 7圣地亚哥大都会酒店 圣地亚哥大都市8号 9圣地亚哥大都会酒店 10生物生物 11柯昆博 ...

我想对一些分类数据进行矢量化,以构建训练和测试矩阵

我有85个城市,我想得到一个282520行的矩阵,每一行都是向量

[1 0 0 ..., 0 0 0]
我希望每行有一个向量,根据城市的不同,向量为1或0,因此每个城市都应该是一列:

print(df['city'])
0圣地亚哥大都市酒店
圣地亚哥大都会1号
圣地亚哥大都市2号
圣地亚哥大都会3号酒店
4柯昆博
5圣地亚哥
6圣地亚哥
7圣地亚哥大都会酒店
圣地亚哥大都市8号
9圣地亚哥大都会酒店
10生物生物
11柯昆博
...                             ...
圣地亚哥大都会282520
名称:城市,数据类型:对象
这就是我所尝试的:

from sklearn import preprocessing

list_city = getList(df,'city')
le = preprocessing.LabelEncoder()
le.fit(list_city)

print(le.transform(['AISEN'])) 
print(le.transform(['TARAPACA']))
print(le.transform(['AISEN DEL GENERAL CARLOS IBANEZ DEL CAMP']))
我得到以下输出:

[0]
[63]
[1]

问题是,我只是在获取城市指数,我在寻找如何将数据矢量化的建议。

一个选项是
pd.get_dummies
(这完全不属于
sklearn
生态系统)

city\u COQUIMBO city\u METROPOLITANA DE SANTIAGO city\u SANTIAGO
0              0                               1              0
1              1                               0              0
2              0                               0              1
3              0                               0              1
如果需要NumPy数组,只需获取
值即可

pd.get_dummies(df).values
[[0 1 0]
[1 0 0]
[0 0 1]
[0 0 1]]

另一种方法是结合使用
LabelEncoder
onehotcoder
。正如您所注意到的,
LabelEncoder
将返回任意标签数组的分类索引
OneHotEncoder
将这些索引转换为一对一的编码方案

le = LabelEncoder()
enc = OneHotEncoder(sparse=False)
enc.fit_transform(le.fit_transform(df.city.values).reshape(-1, 1))
[[0.1.0]
[ 1.  0.  0.]
[ 0.  0.  1.]
[ 0.  0.  1.]]

另一个选项是
dictvectorier

dv = DictVectorizer(sparse=False)
dv.fit_transform(df.apply(dict, 1))
[[0.1.0]
[ 1.  0.  0.]
[ 0.  0.  1.]
[ 0.  0.  1.]]

你确定你不是在找那个人吗?对我来说,这听起来更像是你在寻找的。谢谢你的支持。这非常有帮助。不过,这将给我提供85个专栏,然后,我需要找到一种方法,将numpy数组中的85列转换为matrix@neo我编辑了我的答案,以展示如何从
pd.get_dummies
的结果中提取
ndarray
,以及另外两种方法。@感谢您的帮助,我非常感谢您的支持,非常感谢
dv = DictVectorizer(sparse=False)
dv.fit_transform(df.apply(dict, 1))