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]])