python pandas:将逗号分隔的列拆分为新列 - 每个值一个

Posted

技术标签:

【中文标题】python pandas:将逗号分隔的列拆分为新列 - 每个值一个【英文标题】:python pandas: split comma-separated column into new columns - one per value 【发布时间】:2018-07-27 03:34:43 【问题描述】:

我有一个这样的数据框:

data = np.array([["userA","event2, event3"],
            ['userB',"event3, event4"],
            ['userC',"event2"]])

data = pd.DataFrame(data)

        0         1
0   userA   "event2, event3"
1   userB   "event3, event4"
2   userC   "event2"

现在我想得到一个这样的数据框:

       0    event2      event3      event4
0   userA     1           1
1   userB                 1           1
2   userC     1

有人可以帮忙吗?

【问题讨论】:

可能重复:***.com/questions/35491274/… Pandas split column of lists into multiple columns的可能重复 【参考方案1】:

看来您需要将get_dummies 替换为0 以清空strings:

df = data[[0]].join(data[1].str.get_dummies(', ').replace(0, ''))
print (df)
       0 event2 event3 event4
0  userA      1      1       
1  userB             1      1
2  userC      1              

详情

print (data[1].str.get_dummies(', '))
   event2  event3  event4
0       1       1       0
1       0       1       1
2       1       0       0

【讨论】:

虚拟化时如何添加前缀?【参考方案2】:

如果你有很多特征(词),那么使用稀疏矩阵来更有效地使用内存是有意义的:

In [120]: from sklearn.feature_extraction.text import CountVectorizer

In [121]: cvect = CountVectorizer()

In [122]: data = data.join(pd.SparseDataFrame(cvect.fit_transform(data.pop(1)),
                                              data.index,
                                              cvect.get_feature_names(),
                                              default_fill_value=0))

In [123]: data
Out[123]:
       0  event2  event3  event4
0  userA       1       1       0
1  userB       0       1       1
2  userC       1       0       0

In [124]: data.memory_usage()
Out[124]:
Index     80
0         24
event2    16
event3    16
event4     8
dtype: int64

【讨论】:

以上是关于python pandas:将逗号分隔的列拆分为新列 - 每个值一个的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 SQL 将存储为 CSV(逗号分隔值)的表列的内容拆分为新表中的单独行吗?

将逗号分隔值拆分为 Oracle 中的列

Python中的拆分和连接值

将逗号分隔的列条目拆分为行

将整列整数转换为字符串,在 Pandas 中使用逗号分隔千位

Pandas 用逗号将列拆分为多列