一次对多列进行一次热编码并附加到主数据集?

Posted

技术标签:

【中文标题】一次对多列进行一次热编码并附加到主数据集?【英文标题】:One Hot Encoding for multiple columns in one go and appending to main dataset? 【发布时间】:2020-08-04 15:36:00 【问题描述】:

我在 python 中使用以下代码对我的数据集中的许多分类变量之一进行一次性编码。但是,我想一次对多列进行编码,但无法这样做。此外,这些多列具有不同的类别数量,例如;一个可能只有“是”和“否”,但其他列有 4-5 个不同的类别。如何使用以下代码将它们全部编码并将其附加到主数据集中?

from numpy import array
from numpy import argmax
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# define example
  data = df[["column-name"]]
  values = array(data)
  print(values)
# integer encode
  label_encoder = LabelEncoder()
  integer_encoded = label_encoder.fit_transform(values)
  print(integer_encoded)
# binary encode
  onehot_encoder = OneHotEncoder(sparse=False)
  integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
  onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
  print(onehot_encoded)

【问题讨论】:

你能展示一下“数据”的样子吗? col1 col2 col3 是 是 A 否 是 B 否 否 C 是 否 F 是 否 A 【参考方案1】:

您可以使用 pandas get_dummies() 函数轻松实现您想做的事情。尝试执行此代码:

data = pd.get_dummies(data)

这将对所有分类变量进行编码并将其附加到主数据框中。

【讨论】:

应该可以。请查看文档pandas.pydata.org/pandas-docs/stable/reference/api/… 中的示例 绝对是单列字符变量。不为多。我的问题是针对多列的。 里面有一个叫做'columns'的参数,默认是none。在此处传递所有列列表。你会得到你想要的。 另外,请查看第三个示例。您甚至不需要传递列名。

以上是关于一次对多列进行一次热编码并附加到主数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sklearn 对 CSV 文件中的多列进行一次热编码?

使用 sklearn 或 pandas 进行一次热编码后,如何在混合数据集(数值 + 分类)上应用 KNN

scikit-learn:如果经过一次热编码后它的特征少于训练/测试集,如何预测新数据

一次热编码多维数据

一次热编码期间的 RunTimeError

循环对 PANDAS 数据帧进行一次热编码质量检查