我想看看哪些标签在我的数据集中出现得最频繁。当我自己尝试这样做时,我得到了这样的结果:
df['tags'].value_counts()
['启动'] 80[“比特币”] 79[《每日精选》] 78[“成瘾”、“健康”、“身体”、“酒精”、“精神健康”] 62有些文章有许多标签,但我想计数的跟踪计数分别为每个标签。
pw136qt21#
IIUC,您需要使用ast.literal_eval、explode(),然后使用value_counts()。
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:
这个函数在过去被证明是"安全的",但没有定义它的含义。这是误导。它被专门设计为不执行Python代码,不像更通用的eval()。[...]但它也不是没有攻击:一个相对较小的输入可能导致内存耗尽或C堆栈耗尽,使进程崩溃。在某些输入上也可能出现过度CPU消耗拒绝服务。因此,不建议在不受信任的数据上调用它。
bis0qfac2#
您可以将collections.Counter和apply或agg用于您的系列。
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包含
c
Counter({'Startup': 2, 'Bitcoin': 1, 'Ethereum': 1})
2条答案
按热度按时间pw136qt21#
IIUC,您需要使用
ast.literal_eval
、explode()
,然后使用value_counts()
。输出:
输入数据框示例:
感谢@ljmc:
ast.literal_eval
并不总是安全的。来自文档:*这个函数在过去被证明是"安全的",但没有定义它的含义。这是误导。它被专门设计为不执行Python代码,不像更通用的eval()。[...]但它也不是没有攻击:一个相对较小的输入可能导致内存耗尽或C堆栈耗尽,使进程崩溃。在某些输入上也可能出现过度CPU消耗拒绝服务。因此,不建议在不受信任的数据上调用它。
bis0qfac2#
您可以将
collections.Counter
和apply
或agg
用于您的系列。c
包含