我有一个格式为的数据帧
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)
这应该适当地扩展到大量的列。如果你需要计算单词而不是字符,上面的解决方案只需要稍作修改。