Combining pandas group_by and sklearn countVectorizer



我有一个格式为的数据帧

ID    col1  col2  col3   class
1     0.35  "A"    "x"  'class1'
1     0.35  "B"    "y"  'class1'
1     0.35  "A"    "x"  'class1'
1     0.35  "A"    "z"  'class1'
2     0.48  "B"    "u"  'class2'
2     0.48  "A"    "x"  'class2'
3     0.14  "C"    "v"  'class3'

其中col2和col3的尺寸非常高(总共超过7000)。我必须对ID字段进行分类。因此,根据我的理解,我需要对数据进行分组。如果我使用pandas group_by并使用密集格式,内存就会爆炸。所以我想知道将数据输入分类器的最佳方式是什么?我是否可以根据col2和col3的计数对数据进行分组,同时保持col1的原样,并在稀疏矩阵中输出?

如果我理解您的要求,我会通过分离groupby和功能选择来实现,这样groupby只聚合字符串,而CountVectorizer应用于这些分组字符串。例如:

>>> grouped = df.groupby('ID').aggregate({'col1':'first',
                                          'col2':'sum',
                                          'col3':'sum'})
>>> grouped['all'] = grouped['col2'] + grouped['col3']
>>> print(grouped)
    col3  col1  col2       all
ID                            
1   xyxz  0.35  ABAA  ABAAxyxz
2     ux  0.48    BA      BAux
3      v  0.14     C        Cv
>>> from sklearn.feature_extraction.text import CountVectorizer
>>> features = CountVectorizer(analyzer='char').fit_transform(grouped['all'])
>>> features.shape
(3, 8)

这应该适当地扩展到大量的列。如果你需要计算单词而不是字符,上面的解决方案只需要稍作修改。

相关内容

  • 没有找到相关文章

最新更新