我有一个像这样的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']
我希望通过使用单热编码将其用于机器学习。我知道我可以使用scikit-learn的sklearn.preprocessing包来实现它,但我不确定如何做到这一点。
注意:我没有列出所有可能的类别。
答案 0 :(得分: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
)
答案 1 :(得分:0)
作为piRSquared's answer的替代方案,您可以使用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)
在我的测试中,这速度提高了几个数量级,特别是对于大型数据集。