无法将数据帧列转换为 int64 数据类型

问题描述 投票:0回答:1

我有一个问题。

在我的 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

我尝试删除空值,甚至创建条件来删除具有空值的行

python python-3.x pandas dataframe scikit-learn
1个回答
0
投票

你可以试试

df['job'] = pd.to_numeric(df['job'], errors='coerce')

熊猫医生的

© www.soinside.com 2019 - 2024. All rights reserved.