首页 > 解决方案 > 使用 one-hot 编码将列表转换为二进制值

问题描述

我在CSV文件中有一列。列中的每个单元格在列表中都有多个值。例如,一个单元格将包含另一个单元['A', 'B', 'C']['B', 'D']。我想申请one-hot encoding此列以转换为二进制值以用于机器学习。

请让我知道我该怎么做?

标签: pythonpandasmachine-learningcategorical-dataone-hot-encoding

解决方案


输入是 csv 文件,所以没有列表,只有字符串。因此,删除[]并使用删除列名中Series.str.get_dummies的尾随:'

df = df['col'].str.strip('[]').str.get_dummies(', ')
df.columns = df.columns.str.strip("'")

如果将字符串转换为列表需要进行一些处理以MultiLabelBinarizer提高性能:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(df['col']),columns=mlb.classes_)
print (df)

推荐阅读