如何将带有 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 系列变成数值?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个 Spark 数据框以从 np.arrays 列表(由 RDKit 生成)提供给 sparks 随机森林实现?
numpy np.array 与 np.matrix (性能)