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

如何高效从超大规模DataFrame中提取所有符合括号包裹规则的值

超大规模DataFrame提取括号包裹值高效方案

规则说明

需提取完全被小括号包裹的字符串,如(example)符合要求,(example不符合。

最高效实现方案

采用pandas向量化操作,全程无Python层循环,处理数百万行数据速度远高于逐元素遍历/自定义函数方案。

import pandas as pd

# 示例DataFrame,实际使用时替换为你的数据
df = pd.DataFrame({'A': ['1', '(2)', '3', '(4', '(5)'], 'B':['a', 'b', '(c)', 'd', 'e']})

# 1. 拉平所有列数据为一维Series
flat_series = df.stack()
# 2. 首尾字符直接判断,比正则匹配效率更高
is_match = flat_series.str.startswith('(') & flat_series.str.endswith(')')
# 3. 过滤匹配结果转集合去重,得到最终输出
result = set(flat_series[is_match])

运行后得到的result即为预期的{'(2)', '(5)', '(c)'}。

方案优势

  • 所有操作均为pandas底层C实现,避免Python循环开销,同等数据规模下速度是apply方案的数十倍
  • 内存占用可控,stack操作仅生成视图而非完整数据副本,适合超大规模DataFrame使用

可选优化

  • 若数据中存在非字符串类型,可先统一转换避免报错:flat_series = df.stack().astype(str)
  • 若数据空值占比极高,可先过滤空值减少计算量:flat_series = df.stack().dropna()
  • 若后续规则需要限制括号内的内容格式(如仅允许数字、字母),可将判断逻辑替换为正则匹配:is_match = flat_series.str.fullmatch(r'^\([0-9a-zA-Z]+\)$', na=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:02