如何将Pandas 和np.arrays 的数列变成数值?

How to make Pandas Series with np.arrays into numerical value?

我正在使用经典的泰坦尼克号数据集。我用 OneHotEncoder 来编码人的姓氏。

transformer = make_column_transformer((OneHotEncoder(sparse=False), ['Surname']), remainder = "drop")
encoded_surname = transformer.fit_transform(titanic)
titanic['Encoded_Surname'] = list(encoded_surname.astype(np.float64))

这是我的数据框的样子:

这是我在查找 .info():

时得到的结果
Data columns (total 7 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   Survived         891 non-null    int64  
 1   Pclass           891 non-null    int64  
 2   Sex              891 non-null    int64  
 3   SibSp            891 non-null    int64  
 4   Parch            891 non-null    int64  
 5   Fare             891 non-null    float64
 6   Encoded_Surname  891 non-null    object 
dtypes: float64(1), int64(5), object(1)

由于 Encoded_Surname 标签是一个对象而不是数字,所以我无法将数据放入分类器模型中。

如何将 OneHotEncoder 得到的 np.array 转换为数字数据?

IIUC,为 encoded_surname 数据创建一个新的数据框并将其加入您的原始数据集:

transformer = make_column_transformer((OneHotEncoder(sparse=False), ['Surname']), remainder = "drop")
encoded_surname = transformer.fit_transform(titanic)

titanic = titanic.join(pd.DataFrame(encoded_surname, dtype=int).add_prefix('Encoded_Surname'))

我建议您使用 pd.get_dummies 而不是 OneHotEncoder。如果你真的想使用 OneHotEncoder:

ohe_df = pd.DataFrame(encoded_surname, columns=transformer.get_feature_names())
#concat with original data
titanic = pd.concat([titanic, ohe_df], axis=1).drop(['Surname'], axis=1)

如果可以使用pd.get_dummies:

titanic = pd.get_dummies(titanic, prefix=['Surname'], columns=['Surname'], drop_first=True)