2

我有一个这样的 csv 文件:

text short_text category
...  ...        ...

我已打开文件并将其存储在 Pandas 数据框中,如下所示:

filepath = 'path/data.csv'
train = pd.read_csv(filepath, header=0, delimiter=",")

每条记录的类别字段包含一个类别列表,该列表是一个字符串,每个类别都用单引号括起来,如下所示:

['Adult'   'Aged'   'Aged   80 and over'   'Benzhydryl Compounds/*therapeutic use'   'Cresols/*therapeutic use'   'Double-Blind Method'   'Female'   'Humans'   'Male'   'Middle Aged'   'Muscarinic Antagonists/*therapeutic use'   '*Phenylpropanolamine'   'Tolterodine Tartrate'   'Urinary Incontinence/*drug therapy']

我希望通过使用 one-hot 编码将其用于机器学习。我知道我可以使用 scikit-learn 的 sklearn.preprocessing 包来实现这一点,但我不确定如何做到这一点。

注意:我没有所有可能类别的列表。

4

2 回答 2

0

你可以pd.value_counts用来帮助

df = pd.DataFrame(dict(
        text=list('ABC'),
        short_text=list('XYZ'),
        category=[list('abc'), list('def'), list('abefxy')]
    ))

df.category.apply(pd.value_counts).fillna(0).astype(int)

在此处输入图像描述

或一切在一起

pd.concat(
    [df.drop('category', 1),
     df.category.apply(pd.value_counts).fillna(0).astype(int)],
    axis=1
)

在此处输入图像描述

于 2016-12-14T20:00:24.220 回答
0

作为piRSquared 答案的替代方案,您可以使用sklearn.preprocessing.MultiLabelBinarizer.

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
pd.concat([
    df.drop('category', 1),
    pd.DataFrame(mlb.fit_transform(df['category']), columns=mlb.classes_),
], 1)

在我的测试中,这要快几个数量级,尤其是对于大型数据集。

于 2016-12-14T20:21:11.853 回答