Python 将熊猫中的分类特征转换为数字特征时出错

Python 将熊猫中的分类特征转换为数字特征时出错,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我的数据帧包含一个分类功能“Street”,它可以采用2个可能值“Grvl”或“Pave”中的1个。我试图在拟合ML算法之前将这个分类特征转换为数值。我的代码如下所示 dataset['Street']=dataset['Street'].map({'Grvl':0,'Pave':1}).astype(int) 我用数据帧中出现最多的值填充了缺失的值 dataset['Street'].isnull().sum() 我得到以下错误 ValueError

我的数据帧包含一个分类功能“Street”,它可以采用2个可能值“Grvl”或“Pave”中的1个。我试图在拟合ML算法之前将这个分类特征转换为数值。我的代码如下所示

dataset['Street']=dataset['Street'].map({'Grvl':0,'Pave':1}).astype(int)

我用数据帧中出现最多的值填充了缺失的值

dataset['Street'].isnull().sum()
我得到以下错误

    ValueError                                Traceback (most recent call last)
<ipython-input-59-86f0b031335a> in <module>()
      2     print dataset['Street'].isnull().sum()
      3     #dataset['MSZoning'] = dataset['MSZoning'].map( {'A': 0, 'C': 1,'FV': 2,'I':3,'RH':4,'RL':5,'RP':6,'RM':7} ).astype(int)
----> 4     dataset['Street']=dataset['Street'].map({'Grvl':0,'Pave':1}).astype(int)
      5     dataset['LotShape']=dataset['LotShape'].map({'Reg':0,'IR1':1,'IR2':2,'IR3':3}).astype(int)
      6     dataset['LandContour']=dataset['LandContour'].map({'Lvl':0,'Bnk':1,'HLS':2,'Low':3}).astype(int)

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\generic.pyc in astype(self, dtype, copy, raise_on_error, **kwargs)
   2948 
   2949         mgr = self._data.astype(dtype=dtype, copy=copy,
-> 2950                                 raise_on_error=raise_on_error, **kwargs)
   2951         return self._constructor(mgr).__finalize__(self)
   2952 

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\internals.pyc in astype(self, dtype, **kwargs)
   2936 
   2937     def astype(self, dtype, **kwargs):
-> 2938         return self.apply('astype', dtype=dtype, **kwargs)
   2939 
   2940     def convert(self, **kwargs):

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\internals.pyc in apply(self, f, axes, filter, do_integrity_check, consolidate, raw, **kwargs)
   2888 
   2889             kwargs['mgr'] = self
-> 2890             applied = getattr(b, f)(**kwargs)
   2891             result_blocks = _extend_blocks(applied, result_blocks)
   2892 

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\internals.pyc in astype(self, dtype, copy, raise_on_error, values, **kwargs)
    432                **kwargs):
    433         return self._astype(dtype, copy=copy, raise_on_error=raise_on_error,
--> 434                             values=values, **kwargs)
    435 
    436     def _astype(self, dtype, copy=False, raise_on_error=True, values=None,

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\internals.pyc in _astype(self, dtype, copy, raise_on_error, values, klass, mgr, **kwargs)
    475 
    476                 # _astype_nansafe works fine with 1-d only
--> 477                 values = com._astype_nansafe(values.ravel(), dtype, copy=True)
    478                 values = values.reshape(self.shape)
    479 

C:\Users\JAYASHREE\Anaconda2\lib\site-packages\pandas\core\common.pyc in _astype_nansafe(arr, dtype, copy)
   1912 
   1913         if np.isnan(arr).any():
-> 1914             raise ValueError('Cannot convert NA to integer')
   1915     elif arr.dtype == np.object_ and np.issubdtype(dtype.type, np.integer):
   1916         # work around NumPy brokenness, #1987

ValueError: Cannot convert NA to integer
ValueError回溯(最近一次调用)
在()
2打印数据集['Street'].isnull().sum()
3#dataset['MSZoning']=dataset['MSZoning'].map({'A':0,'C':1,'FV':2,'I':3,'RH':4,'RL':5,'RP':6,'RM':7}).astype(int)
---->4数据集['Street']=数据集['Street'].map({'Grvl':0,'Pave':1})。aType(int)
5数据集['LotShape']=dataset['LotShape'].map({'Reg':0,'IR1':1,'IR2':2,'IR3':3})。aType(int)
6数据集['LandContour']=数据集['LandContour'].map({'Lvl':0,'Bnk':1,'HLS':2,'Low':3})。aType(int)
astype中的C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\generic.pyc(self、dtype、copy、raise on_error、**kwargs)
2948
2949 mgr=self.\u data.astype(dtype=dtype,copy=copy,
->2950上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升上升
2951返回self.\u构造器(经理)。\u完成\u(self)
2952
C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\internals.pyc在astype中(self,dtype,**kwargs)
2936
2937 def astype(自我,数据类型,**kwargs):
->2938返回self.apply('astype',dtype=dtype,**kwargs)
2939
2940 def转换(自身,**kwargs):
C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\internals.pyc在应用中(self、f、axes、filter、do\u integrity\u check、consolid、raw、**kwargs)
2888
2889 kwargs['mgr']=自我
->2890应用=getattr(b,f)(**kwargs)
2891结果块=\u扩展块(应用,结果块)
2892
C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\internals.pyc在astype中(self、dtype、copy、raise、on\u错误、值、**kwargs)
432**夸尔格):
433返回self.\u astype(数据类型,copy=copy,raise\u on\u error=raise\u on\u error,
-->434个值=值,**kwargs)
435
436定义类型(self、dtype、copy=False、raise=True、value=None、,
C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\internals.pyc in_astype(self、dtype、copy、raise on_错误、值、klass、mgr、**kwargs)
475
476#u astype_nansafe仅适用于1-d
-->477 values=com.\u astype\u nansafe(values.ravel(),dtype,copy=True)
478值=值。重塑(自形)
479
C:\Users\JAYASHREE\Anaconda2\lib\site packages\pandas\core\common.pyc in_astype_nansafe(arr,dtype,copy)
1912
1913如果np.isnan(arr.any():
->1914 raise VALUERROR('无法将NA转换为整数')
1915 elif arr.dtype==np.object_uu和np.issubdtype(dtype.type,np.integer):
1916年#致力于解决NumPy破碎问题#1987年
ValueError:无法将NA转换为整数

您的数据帧中有NaN值!因为您无法将序列从对象转换为整数(使用asType(int)),如果缺少值,您应该先填充缺少的值!
dataset['Street'].isnull().sum()
dosn填充缺少的值


您可以使用或

“我已经用数据帧中出现最多的值填充了缺失的值”我在这里没有看到这样的代码。它在哪里?我肯定在您的
Street
列中有一些既不是“Grvl”也不是“Pave”的内容。
dataset['Street']的输出是什么。unique()
?@CrazyElf这是代码freq_street=dataset.street.dropna().mode()[0]dataset['street']=dataset['street'].fillna(freq_street)@Bonifacio2语句的输出是['Pave''Grvl'],您的代码应该可以工作。我使用模式值freq_street=dataset.street.dropna().mode()[0]dataset['street']=dataset['street'].fillna(freq_street'])向我们展示更大部分的代码,它应该是有效的,但你告诉我们不是。