如何将带有 np.arrays 的 Pandas 系列变成数值?

Posted

技术标签:

【中文标题】如何将带有 np.arrays 的 Pandas 系列变成数值?【英文标题】:How to make Pandas Series with np.arrays into numerical value? 【发布时间】:2022-01-07 00:58:12 【问题描述】:

我正在使用经典的泰坦尼克号数据集。我使用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 转换为数字数据?

【问题讨论】:

【参考方案1】:

我建议您使用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)

【讨论】:

【参考方案2】:

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'))

【讨论】:

以上是关于如何将带有 np.arrays 的 Pandas 系列变成数值?的主要内容,如果未能解决你的问题,请参考以下文章

将多个数据文件组合成 np.arrays,存储在字典中

如何创建一个 Spark 数据框以从 np.arrays 列表(由 RDKit 生成)提供给 sparks 随机森林实现?

如何将 NULL 视为带有 pandas 的普通字符串?

numpy np.array 与 np.matrix (性能)

如何将带有文本信息的 1.3 GB csv 文件读入 Python 的 pandas 对象?

如何将带有无效字符(重音)的 Pandas 数据框与数组匹配? [复制]