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

ryhaxcpt  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(178)

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

df['tags'].value_counts()

['启动'] 80
[“比特币”] 79
[《每日精选》] 78
[“成瘾”、“健康”、“身体”、“酒精”、“精神健康”] 62
有些文章有许多标签,但我想计数的跟踪计数分别为每个标签。

pw136qt2

pw136qt21#

IIUC,您需要使用ast.literal_evalexplode(),然后使用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:

  • 注意:ast.literal_eval并不总是安全的。来自文档:*

这个函数在过去被证明是"安全的",但没有定义它的含义。这是误导。它被专门设计为不执行Python代码,不像更通用的eval()。[...]但它也不是没有攻击:一个相对较小的输入可能导致内存耗尽或C堆栈耗尽,使进程崩溃。在某些输入上也可能出现过度CPU消耗拒绝服务。因此,不建议在不受信任的数据上调用它。

bis0qfac

bis0qfac2#

您可以将collections.Counterapplyagg用于您的系列。

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})

相关问题