我有一列包含多个值。我想将唯一值拆分为带有标题的多列,然后应用Label Encoder或One Hot Encoder(我还不知道),因为我要解决多标签文本分类问题。
我尝试
df['labels1'] = df['labels1'].str.split(',', expand=True)
,但仅拆分第一项。同样,在尝试拆分列之前,我尝试更改类型,但没有成功。
id
0 Politics, Journals, International
1 Social, Blogs, Celebrities
2 Media, Blogs, Video
3 Food&Drink, Cooking
4 Media, Blogs, Video
5 Culture
6 Social, TV Shows
7 News, Crime, National
8 Social, Blogs, Celebrities
9 Social, Blogs, Celebrities
10 Social, Blogs, Celebrities
11 Family, Blogs
12 Media, Blogs, Video
13 Social, TV Shows
14 Entertainment, TV Shows
15 Social, TV Shows
16 Social, Blogs, Celebrities
答案 0 :(得分:0)
似乎对于df ['labels1']。str.split(',',expand = True)方程的右边会吐出两个项目。所以也许您可以做类似的事情:
df['newcolumn1'], df['newcolumn2'] = df['labels1'].str.split(',', expand=True)
答案 1 :(得分:0)
您尝试使用三列数据框设置数据框的一列-不幸的是,它仅通过传递第一列来静默地完成...
也许您尝试将新的三个扩展列连接到第一个数据框
df = pd.concat([df, df['labels1'].str.split(', ', expand=True)], 1)
或者也许只是在新步骤中继续这一步骤
df_exp = df['labels1'].str.split(', ', expand=True)
编辑:
IIUC,您的二进制表 可以这样创建(但我不知道这是否是推荐的方法):
col_head = set(df.labels1.str.split(', ', expand=True).values.flatten())
bin_tbl = pd.DataFrame(columns=col_head)
for c in bin_tbl:
bin_tbl[c] = df.labels1.str.split(', ').apply(lambda x: c in x)