You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

代码说明

  1. 正则提取逻辑:\(Most Recent Alarm Trigger\)','valueString':'([^']+) 匹配目标前缀,捕获单引号内的全部内容,确保拿到第一个出现的目标词汇。
  2. 次数统计逻辑:用re.escape处理提取到的词汇,避免特殊字符干扰正则匹配,再通过findall统计完整短语的出现次数。
  3. 容错处理:添加空值判断,防止因无匹配内容导致代码报错。

执行后将生成包含Extract和Count列的DataFrame,与你预期结果一致。

内容的提问来源于stack exchange,提问作者Jawed Sheikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:10:29