使用pandasngram数据挖掘的数据中最常见的字符串

2024-10-02 16:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在csv文件的一个单列中有一个数据,格式如下。在

['hhcb', 'hcbc', 'cbcc', 'bccc', 'cccd', 'ccdd', 'cddh']
['fahb', 'ahba', 'hbac', 'bacc']
['hchc', 'chcb', 'hcbh']
['hhhh', 'hhhh', 'hhhc', 'hhcd', 'hcdc', 'cdcc']
['habb', 'abbb', 'bbbb', 'bbbc', 'bbcc', 'bccd', 'ccdh', 'cdhd']

我必须找到这个数据中出现最多的四个长度的字符串。 请指点路。 (举个例子,原始数据很大)


Tags: 文件csv数据格式hhhhcbcccccdhhcb
3条回答

有一个办法。在

In [78]: ngram
Out[78]:
0          [hhcb, hcbc, cbcc, bccc, cccd, ccdd, cddh]
1                            [fahb, ahba, hbac, bacc]
2                                  [hchc, chcb, hcbh]
3                [hhhh, hhhh, hhhc, hhcd, hcdc, cdcc]
4    [habb, abbb, bbbb, bbbc, bbcc, bccd, ccdh, cdhd]
dtype: object

In [79]: pd.Series(ngram.sum()).value_counts()[:1]
Out[79]:
hhhh    2
dtype: int64

.sum()操作来作弊,它将加入列表。在

您可以使用Counter,为长度为4的每个单词更新它。然后使用most_common()来获取顶部值。在

from collections import Counter

c = Counter()
for row in df.ngram.values:
    for word in row:
        if len(word) == 4:
            c.update([word])

>>> c.most_common()[0]
('hhhh', 2)

计时

^{pr2}$

您可以尝试使用^{}Series创建{},然后^{}和{a3}。最后一个可能的过滤器顶值是按^{}[:5]

print df
                                                  a
0        [hhcb, hcbc, cbcc, bccc, cccd, ccdd, cddh]
1                          [fahb, ahba, hbac, bacc]
2                                [hchc, chcb, hcbh]
3              [hhhh, hhhh, hhhc, hhcd, hcdc, cdcc]
4  [habb, abbb, bbbb, bbbc, bbcc, bccd, ccdh, cdhd]

print df.a.apply(pd.Series).stack().value_counts()[:1]
hhhh    2
dtype: int64

编辑:

如果您需要在每一行中使用top 5,请使用^{}

^{pr2}$

相关问题 更多 >