我有一个包含整数、浮点数和字符串列的数据框 X
。我想要对每一列进行独热编码,但只针对“Object”类型的列。因此,我正在尝试执行以下操作:
encoding_needed = X.select_dtypes(include='object').columns
ohe = preprocessing.OneHotEncoder()
X[encoding_needed] = ohe.fit_transform(X[encoding_needed].astype(str)) #need astype bc I imputed with 0, so some rows have a mix of zeroes and strings.
然而,我最终遇到了“IndexError: tuple index out of range”的问题。根据文档,编码器期望
X:array-like,shape [n_samples,n_features]
,所以我应该可以传递一个数据框。如何对encoding_needed
中特别标记的列进行独热编码?编辑:
数据是机密的,因此我无法共享它,也无法创建一个包含123列的虚拟数据集。
我可以提供以下信息:
X.shape: (40755, 123)
encoding_needed.shape: (81,) and is a subset of columns.
全栈:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-90-6b3e9fdb6f91> in <module>()
1 encoding_needed = X.select_dtypes(include='object').columns
2 ohe = preprocessing.OneHotEncoder()
----> 3 X[encoding_needed] = ohe.fit_transform(X[encoding_needed].astype(str))
~/anaconda3/envs/python3/lib/python3.6/site-packages/pandas/core/frame.py in __setitem__(self, key, value)
3365 self._setitem_frame(key, value)
3366 elif isinstance(key, (Series, np.ndarray, list, Index)):
-> 3367 self._setitem_array(key, value)
3368 else:
3369 # set column
~/anaconda3/envs/python3/lib/python3.6/site-packages/pandas/core/frame.py in _setitem_array(self, key, value)
3393 indexer = self.loc._convert_to_indexer(key, axis=1)
3394 self._check_setitem_copy()
-> 3395 self.loc._setitem_with_indexer((slice(None), indexer), value)
3396
3397 def _setitem_frame(self, key, value):
~/anaconda3/envs/python3/lib/python3.6/site-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
592 # GH 7551
593 value = np.array(value, dtype=object)
--> 594 if len(labels) != value.shape[1]:
595 raise ValueError('Must have equal len keys and value '
596 'when setting with an ndarray')
IndexError: tuple index out of range