如何将多个值从数据框列拆分为单独的列

时间:2019-06-02 21:48:07

标签: python pandas

我有一列包含多个值。我想将唯一值拆分为带有标题的多列,然后应用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

2 个答案:

答案 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)