代码之家  ›  专栏  ›  技术社区  ›  IvonaK

如何计算给定字符串在panda中的字符串数组中的出现次数

  •  1
  • IvonaK  · 技术社区  · 2 年前

    我想看看哪些标签在我的数据集中出现得最频繁。当我试着自己做这件事时,我会得到这样的结果:

    df['tags'].value_counts()
    

    [‘启动’]80
    [比特币]79
    [每日精选]78
    [‘饮食’、‘健康’、‘身体’、‘酒精’、‘心理健康’]62

    有些文章有很多标签,但是 我想分别计算每个标签的跟踪计数。

    2 回复  |  直到 2 年前
        1
  •  1
  •   I'mahdi    2 年前

    IIUC,你需要使用 ast.literal_eval , explode() ,然后使用 value_counts() .

    from ast import literal_eval
    import pandas as pd
    
    res = df['tags'].apply(literal_eval).explode().value_counts()
    print(res)
    

    输出:

    Startup      4
    Bitcoin      3
    Addiction    2
    Health       2
    Name: tags, dtype: int64
    

    示例输入数据帧:

    df = pd.DataFrame({
        "tags" : [
            "['Startup']", "['Startup']", "['Startup']", "['Startup']",
            "['Bitcoin']", "['Bitcoin']", "['Bitcoin']", 
            "['Addiction', 'Health']", "['Addiction', 'Health']"
        ]
    })
    

    感谢@ljmc:

    NB。 ast.literal_eval 并不总是安全的。从…起 doc :

    这一功能在过去被证明是安全的,但没有定义这意味着什么。这是误导。与更通用的eval()不同,这是专门为不执行Python代码而设计的。[…]但它并非没有攻击:相对较小的输入可能导致内存耗尽或C堆栈耗尽,从而导致进程崩溃。在某些输入上,还可能存在CPU消耗过多而拒绝服务的可能性。因此,不建议在不受信任的数据上调用它。

        2
  •  0
  •   ljmc    2 年前

    您可以使用 collections.Counter apply agg 到您的系列。

    import pandas as pd
    from collections import Counter
    
    df = pd.DataFrame({
        "tags": [['Startup'], ["Bitcoin"], ["Startup", "Ethereum"]]
    })
    
    c = Counter()
    df["tags"].apply(c.update)
    

    c 包含

    Counter({'Startup': 2, 'Bitcoin': 1, 'Ethereum': 1})