首页 > 解决方案 > 无法使用 category_encoders 的 fit_transform 对我的数据进行序数编码

问题描述

我正在尝试 fit_transformOrdinalEncoder到我的datacategory_encoders列之一。 我尝试查看的文档是:

    import category_encoders as ce

    # here i'm defining mapping for OrdinalEncoder
    property_ordinal_mapping_1 = [{"col":"property_type", "mapping": [('Apartment', 1),('House', 2),('Condominium', 3),
                                                                      ('Townhouse', 4),('Loft', 5),('Other', 6),
                                                                      ('Guesthouse', 7),('Bed & Breakfast', 8),
                                                                      ('Bungalow', 9),('Villa', 10),('Dorm', 11),
                                                                      ('Guest suite', 12),('Camper/RV', 13),
                                                                      ('Timeshare', 14),('Cabin', 15),('In-law', 16),
                                                                      ('Hostel', 17),('Boutique hotel', 18),('Boat', 19),
                                                                      ('Serviced apartment', 20),('Tent', 21),('Castle', 22),
                                                                      ('Vacation home', 23),('Yurt', 24),('Hut', 25),
                                                                      ('Treehouse', 26),('Chalet', 27),('Earth House', 28),
                                                                      ('Tipi', 29),('Train', 30),('Cave', 31),
                                                                      ('Casa particular', 32),('Parking Space', 33),
                                                                      ('Lighthouse', 34),('Island', 35)
                                                                     ]
                                },
                               ]
    # preparing the OrdinalEncoder for fitting and transforming
    property_encoder_1 = ce.OrdinalEncoder(mapping = property_ordinal_mapping_1, return_df = True, cols=["property_type"])

当我尝试时出现的问题fit_transfom是:
df_train = property_encoder_1.fit_transform(air_cat_2)
错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-96-9cea1713182c> in <module>()
----> 1 df_train = property_encoder_1.fit_transform(air_cat_2)
/usr/local/lib/python3.6/dist-packages/sklearn/base.py in fit_transform(self, X, y, **fit_params)
    551         if y is None:
    552             # fit method of arity 1 (unsupervised transformation)
--> 553             return self.fit(X, **fit_params).transform(X)
    554         else:
    555             # fit method of arity 2 (supervised transformation)

/usr/local/lib/python3.6/dist-packages/category_encoders/ordinal.py in fit(self, X, y, **kwargs)
    139             cols=self.cols,
    140             handle_unknown=self.handle_unknown,
--> 141             handle_missing=self.handle_missing
    142         )
    143         self.mapping = categories

/usr/local/lib/python3.6/dist-packages/category_encoders/ordinal.py in ordinal_encoding(X_in, mapping, cols, handle_unknown, handle_missing)
    288             for switch in mapping:
    289                 column = switch.get('col')
--> 290                 X[column] = X[column].map(switch['mapping'])
    291 
    292                 try:

/usr/local/lib/python3.6/dist-packages/pandas/core/series.py in map(self, arg, na_action)
   3380         """
   3381         new_values = super(Series, self)._map_values(
-> 3382             arg, na_action=na_action)
   3383         return self._constructor(new_values,
   3384                                  index=self.index).__finalize__(self)

/usr/local/lib/python3.6/dist-packages/pandas/core/base.py in _map_values(self, mapper, na_action)
   1216 
   1217         # mapper is a function
-> 1218         new_values = map_f(values, mapper)
   1219 
   1220         return new_values

pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()

TypeError: 'list' object is not callable

sklearn.preprocessing.OrdinalEncoder有类似的错误。
我做错了什么以及如何解决这个问题。我仔细检查了我的专栏的类名并重写了整个代码,但似乎没有任何帮助;或者有没有其他方法可以做到这一点。
请不要将我的问题标记为重复。

标签: pythonpandasmachine-learningcategorical-dataordinal

解决方案


文档不正确。mappingfor现在的语法不同了。见这里:https ://github.com/scikit-learn-contrib/categorical-encoding/issues/193


推荐阅读