如何统计DataFrame列中嵌套列表内各元素的出现次数?
解决DataFrame列表列元素统计问题
问题根源
你的代码出现统计单个字符的情况,大概率是因为df2['elements']列里的“列表”其实是字符串类型(而非真正的Python列表对象),导致循环时把字符串拆成单个字符遍历;另外原代码第一次遇到元素时初始值设为0,也会导致统计结果少1。
解决方案
步骤1:将字符串形式的列表转为真正的列表
如果df2['elements']的元素是字符串(比如"[Element B, Element Cr, Element Re]"),先用ast.literal_eval解析成列表:
import ast df2['elements'] = df2['elements'].apply(ast.literal_eval)
验证类型:执行print(type(df2['elements'].iloc[0])),输出应为<class 'list'>。
步骤2:统计元素出现次数
方法一:用Pandas内置方法(推荐)
用explode将列表拆分为多行,再用value_counts()直接统计:
element_counts = df2['elements'].explode().value_counts() print(element_counts)
示例输出会类似:
Element B 5 Element Cr 1 Element Re 1 ...
方法二:修复你的字典循环
如果坚持用字典实现,修正初始值的错误(第一次出现设为1):
elements_count_dict = {} for entry in df2['elements']: for elem in entry: if elem in elements_count_dict: elements_count_dict[elem] += 1 else: elements_count_dict[elem] = 1 print(elements_count_dict)
内容的提问来源于stack exchange,提问作者J0chin
相关产品推荐
相关产品推荐

