使用 DictVectorizer 转换字符串


satisfaction_level  last_evaluation number_project  average_montly_hours    time_spend_company  Work_accident   left    promotion_last_5years   dept    salary
0.38    0.53    2   157 3   0   1   0   TECHNICAL   low
0.8 0.86    5   262 6   0   1   0   HR  medium
0.11    0.88    7   272 4   0   1   0   HR  medium
0.72    0.87    5   223 5   0   1   0   FINANCE low
0.37    0.52    2   159 3   0   1   0   MARKETING   low
0.41    0.5 2   153 3   0   1   0   TECHNICAL   low
0.1 0.77    6   247 4   0   1   0   HR  low
0.92    0.85    5   259 5   0   1   0   FINANCE low
0.89    1   5   224 5   0   1   0   HR  low

我使用了上面的数据,并尝试使用DictVectorizer转换C。代码给出如下


import pandas as pd
from sklearn.feature_extraction import DictVectorizer
dv=DictVectorizer() 
hr_data=pd.read_csv(r"C:UsersIBM_ADMINDesktopdataHR_comma_sep.csv")
dv.fit_transform(X=hr_data.dept)

但它抛出了错误:

">

str"对象没有属性"项目">

使用 LabelEncoder:

In [304]: df.dept
Out[304]:
0    TECHNICAL
1           HR
2           HR
3      FINANCE
4    MARKETING
5    TECHNICAL
6           HR
7      FINANCE
8           HR
Name: dept, dtype: object
In [305]: from sklearn.preprocessing import LabelEncoder
In [306]: le = LabelEncoder()
In [307]: df['dept'] = le.fit_transform(df['dept'])
In [308]: df.dept
Out[308]:
0    3
1    1
2    1
3    0
4    2
5    3
6    1
7    0
8    1
Name: dept, dtype: int64
In [309]: le.classes_
Out[309]: array(['FINANCE', 'HR', 'MARKETING', 'TECHNICAL'], dtype=object)
或者

我们可以使用category

df.dept.astype('category').cat.codes
Out[925]: 
0    3
1    1
2    1
3    0
4    2
5    3
6    1
7    0
8    1
dtype: int8
df.dept.astype('category').cat.categories
Out[926]: Index(['FINANCE', 'HR', 'MARKETING', 'TECHNICAL'], dtype='object')

这是一个老问题,但我遇到了同样的问题并解决了它:首先,将数据框更改为字典

data_dict = data.to_dict()
dv = DictVectorizer(sparse = False, dtype = int)
dv.fit_transform(data['column'])

为我工作!

实际上,您也应该尝试一下:

如果值是字符串,则首先使用LabelEncoder将它们转换为数字类别,然后使用DictVectorizer:

le = LabelEncoder()
data_le = le.fit_transform(data)

这可能是因为DictVectorizer是用于字典的类,而您正在应用于 Series 对象(通过字典或属性样式访问列的结果(。对于这种情况,我建议从sklearn.preprocessing OneHotEncoder类。

DictVectorizer适用于字典:

vec = DictVectorizer(sparse = False, dtype = int)
data = [{'character': 'Porthos'},{'character': 'Athos'},
        {'character': 'Aramis'}, {'character': 'Athos'},
        {'character': 'Aramis'}
vec.fit_transform(data)
array([[0, 0, 1],
       [0, 1, 0],
       [1, 0, 0],
       [0, 1, 0],
       [1, 0, 0]])

但对于系列或数据帧来说并非如此:

data = pd.DataFrame(data)
vec.fit_transform(data)
*long error*
AttributeError: 'str' object has no attribute 'items'

对于熊猫的数据帧和系列,请使用OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
vec = OneHotEncoder(sparse = False, dtype = int)
vec.fit_transform(data)
array([[0, 0, 1],
       [0, 1, 0],
       [1, 0, 0],
       [0, 1, 0],
       [1, 0, 0]])

相关内容

  • 没有找到相关文章

最新更新