如何用Python统计列表元素在DataFrame中的出现次数?代码排查
问题修正:统计列表元素在DataFrame列中的出现次数
原代码问题点
- 嵌套循环无缩进,违反Python语法规则
for i in listX[0]错误遍历第一个元素的单个字符,而非整个列表的元素- 单个字符串元素无法调用
str.contains(该方法属于pandas Series对象) - Python不支持
count++语法,需使用count += 1
方案1:高效统计每个元素的出现次数(推荐)
利用pandas向量操作,比逐行循环效率更高,输出每个元素对应的匹配行数:
import pandas as pd # 读取Excel文件(路径前加r避免转义错误) df = pd.read_excel(r'C:\Users\ma\Desktop\filee') listX = ["HOFF", "Customers", "bank"] # 初始化结果字典 element_counts = {item: 0 for item in listX} for item in listX: # 检查列中每个元素是否包含当前item,统计匹配行数 # case=False忽略大小写,na=False处理空值避免报错 match_count = df['Examples'].str.contains(item, case=False, na=False).sum() element_counts[item] = match_count # 输出每个元素的匹配次数 print(element_counts)
方案2:统计所有元素的总匹配行数
如果需要统计包含任意列表元素的总行数(只要行包含一个元素就算一次):
import pandas as pd df = pd.read_excel(r'C:\Users\ma\Desktop\filee') listX = ["HOFF", "Customers", "bank"] # 拼接正则表达式,匹配任意列表元素 pattern = '|'.join(listX) total_match = df['Examples'].str.contains(pattern, case=False, na=False).sum() print(f"总匹配行数:{total_match}")
方案3:逐行循环实现(符合你最初的思路)
如果坚持用嵌套循环逐行检查,修正后的代码如下:
import pandas as pd df = pd.read_excel(r'C:\Users\ma\Desktop\filee') listX = ["HOFF", "Customers", "bank"] total_count = 0 # 遍历列表每个元素 for item in listX: # 遍历Examples列的每一行,用fillna处理空值避免报错 for text in df['Examples'].fillna(''): if item in text: total_count += 1 print(f"总出现次数:{total_count}")
内容的提问来源于stack exchange,提问作者Maha Mohammed
相关产品推荐
相关产品推荐

