我有一个问题。
在我的 Pandas DataFrame 中,我有一个名为“job”列的列。我创建了一个简单的自定义转换器,它将映射该列中与作业类型相对应的值。当映射值并检查它之后,该列现在具有浮点数据类型时,就会出现问题。
[这是图片,请参阅“工作”栏] (https://i.sstatic.net/yrImfOe0.png)
我认为这可能会影响我的 DecisionTreeClassifier 和支持向量分类器模型的性能。
这是我使用的自定义转换器的代码片段
class PreprocessJobColumn (BaseEstimator, TransformerMixin):
def __init__ (self):
self.dictionary_map = {
"admin" : 1,
"blue-collar" : 2,
"entrepreneur" : 3,
"housemaid" : 4,
"management" : 5,
"retired" : 6,
"self-employed" : 7,
"services" : 8,
"student" : 9,
"technician" : 10,
"unemployed" : 11
}
def map_job_values (self, element_to_process):
if element_to_process in self.dictionary_map.keys():
return self.dictionary_map.get(element_to_process, -1)
def fit_transform(self, X):
# Create a copy of the dataset
features_dataset_copy = X.copy()
# Mapping values
features_dataset_copy["job"] = features_dataset_copy["job"].apply(self.map_job_values)
features_dataset_copy["job"] = features_dataset_copy["job"].astype("int64")
return features_dataset_copy
如果我运行这段代码,它会给我这个错误:
---------------------------------------------------------------------------
IntCastingNaNError Traceback (most recent call last)
<ipython-input-10-a2bcaadbfea7> in <cell line: 4>()
2 preprocess_education_column = PreprocessEducationColumn()
3
----> 4 df_copy = preprocess_job_column.fit_transform(df_copy)
5 df_copy = preprocess_education_column.fit_transform(df_copy)
9 frames
/usr/local/lib/python3.10/dist-packages/pandas/core/dtypes/astype.py in _astype_float_to_int_nansafe(values, dtype, copy)
143 """
144 if not np.isfinite(values).all():
--> 145 raise IntCastingNaNError(
146 "Cannot convert non-finite values (NA or inf) to integer"
147 )
IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer
我尝试删除空值,甚至创建条件来删除具有空值的行