gpt4 book ai didi

machine-learning - 如何将分类数据映射到 python pandas dataframe 中的category_encoders.OrdinalEncoder

转载 作者:行者123 更新时间:2023-11-30 08:34:41 24 4
gpt4 key购买 nike

我正在尝试使用category_encoders.OrdinalEncoder 将类别映射到pandas 数据框中的整数。但我收到以下错误,没有任何其他有用的提示。

TypeError: 'NoneType' object is not iterable

代码在没有尝试映射的情况下运行良好,但我想要映射。

代码:

import category_encoders as ce

ordinal_cols = [
"ExterQual",
]

ordinal_cols_mapping = [{
"ExterQual": {
'Ex': 5,
'Gd': 4,
'TA': 3,
'Fa': 2,
'Po': 1,
'NA': NaN
}},
]

encoder = ce.OrdinalEncoder( mapping = ordinal_cols_mapping, return_df = True, cols = ordinal_cols,)

df_train = encoder.fit_transform(train_data)
print(df_train)

我哪里错了?

mapping: list of dict a mapping of class to label to use for the encoding, optional.

http://contrib.scikit-learn.org/categorical-encoding/ordinal.html

完整堆栈跟踪:

---------------------------------------------------------------------------
TypeError
Traceback (most recent call last)
<ipython-input-56-4944c8d41d07> in <module>()
150 # use the Ordinal Encoder to map the ordinal data to interval and then fit transform
151 encoder = ce.OrdinalEncoder( return_df = True, cols = ordinal_cols, mapping = ordinal_cols_mapping) #NaNs get -1, mapping = ordinal_cols_mapping removed due to error
--> 152 X = encoder.fit_transform(X)

/opt/conda/lib/python3.6/site-packages/sklearn/base.py in fit_transform(self, X, y, **fit_params)
515 if y is None:
516 # fit method of arity 1 (unsupervised transformation)
--> 517 return self.fit(X, **fit_params).transform(X)
518 else:
519 # fit method of arity 2 (supervised transformation)

/opt/conda/lib/python3.6/site-packages/category_encoders/ordinal.py in fit(self, X, y, **kwargs)
130 cols=self.cols,
131 impute_missing=self.impute_missing,
--> 132 handle_unknown=self.handle_unknown
133 )
134 self.mapping = categories

/opt/conda/lib/python3.6/site-packages/category_encoders/ordinal.py in ordinal_encoding(X_in, mapping, cols, impute_missing, handle_unknown)
249 for switch in mapping:
250 X[str(switch.get('col')) + '_tmp'] = np.nan
--> 251 for category in switch.get('mapping'):
252 X.loc[X[switch.get('col')] == category[0], str(switch.get('col')) + '_tmp'] = str(category[1])
253 del X[switch.get('col')]

TypeError: 'NoneType' object is not iterable

示例数据:

0    0
1 1
2 0
3 1
4 0
Name: ExterQual, dtype: int64

最佳答案

您使用的'mapping'参数错误。

格式应为:

'mapping' param should be a list of dicts where internal dicts should contain the keys 'col' and 'mapping' and in that the 'mapping' key should have a list of tuples of format (original_label, encoded_label) as value.

类似这样的事情:

ordinal_cols_mapping = [{
"col":"ExterQual",
"mapping": [
('Ex',5),
('Gd',4),
('TA',3),
('Fa',2),
('Po',1),
('NA',np.nan)
]},
]

那么不需要单独设置'cols'参数。列名称将从 'mapping' 参数中使用。

只需这样做:

encoder = OrdinalEncoder(mapping = ordinal_cols_mapping, 
return_df = True)
df_train = encoder.fit_transform(train_data)

希望这能让大家清楚。

关于machine-learning - 如何将分类数据映射到 python pandas dataframe 中的category_encoders.OrdinalEncoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com