如何在Pandas DataFrame中提取指定匹配后的首个词汇并统计次数
解决方案
步骤1:提取首个目标词汇
用正则精准匹配(Most Recent Alarm Trigger)','valueString':'之后的内容,直到下一个单引号结束,确保只取第一个匹配到的完整词汇。
步骤2:统计词汇出现次数
基于提取出的词汇,在原单元格文本中统计其完整出现的次数,避免部分匹配干扰结果。
完整代码实现
import re import pandas as pd # 修正原数据中的语法错误(原数据存在多余逗号、括号不匹配等问题,无法正常处理) data = {'product_name': [ "[{'name':'Trigger Cause Status (Most Recent Alarm Trigger)','valueString':'Tilt Sensor','packetType':'enumerated','leastSigBit':440,'Tilt Sensor','mostSigBit':447},{'name':'User Set Year (Most Recent Alarm Trigger)','valueString':'Band','valueNumber':2022.0,'units':'Undefined / Not Used','packetType':'Tilt Sensor','leastSigBit':432,'mostSigBit':439},{'name':'User Set Month,(Most Recent Alarm Trigger)','valueString':'Back space'},{'name':'User Set Minute (Most Recent Alarm Trigger)','valueNumber':16.0,'units':'min','packetType':'unsigned','leastSigBit':400,'mostSigBit':407},'Tilt Sensor',{'name':'User Set Second (Most Recent Alarm Trigger)','valueNumber':36.0,'units':'s','packetType':'unsigned','leastSigBit':392,'mostSigBit':399}]", "[{'name':'Trigger Cause Status (Most Recent Alarm Trigger)','valueString':'Volumetric Sensor','packetType':'enumerated','leastSigBit':440,'mostSigBit':447},{'name':'User Set Year (Most Recent Alarm Trigger)','valueNumber':2022.0,'units':'(Most Recent Alarm Trigger)','valueString':'Being human','packetType':'unsigned','leastSigBit':432,'mostSigBit':439},{'name':'User Set Month (Most Recent Alarm Trigger)','valueNumber':6.0,'valueString':'Hello','packetType':'unsigned','leastSigBit':424,'mostSigBit':431},'Volumetric Sensor',{'name':'User Set Day (Most Recent Alarm }]" ]} df = pd.DataFrame(data) # 提取首个匹配的词汇 extract_pattern = re.compile(r"\(Most Recent Alarm Trigger\)','valueString':'([^']+)") df['Extract'] = df['product_name'].apply(lambda x: extract_pattern.search(x).group(1) if extract_pattern.search(x) else None) # 统计词汇完整出现的次数 def count_occurrences(row): if row['Extract'] is None: return 0 # 转义特殊字符,避免正则匹配异常 count_pattern = re.compile(re.escape(row['Extract'])) return len(count_pattern.findall(row['product_name'])) df['Count'] = df.apply(count_occurrences, axis=1) print(df)
代码说明
- 正则提取逻辑:
\(Most Recent Alarm Trigger\)','valueString':'([^']+)匹配目标前缀,捕获单引号内的全部内容,确保拿到第一个出现的目标词汇。 - 次数统计逻辑:用
re.escape处理提取到的词汇,避免特殊字符干扰正则匹配,再通过findall统计完整短语的出现次数。 - 容错处理:添加空值判断,防止因无匹配内容导致代码报错。
执行后将生成包含Extract和Count列的DataFrame,与你预期结果一致。
内容的提问来源于stack exchange,提问作者Jawed Sheikh
相关产品推荐
相关产品推荐

