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

如何以Pythonic方式为DataFrame所有列应用正则表达式?

更Pythonic的DataFrame正则批量提取方案(无需循环)

嘿,你已经用循环实现了需求,很棒!不过在Pandas里,我们完全可以利用它的向量化操作能力来替代显式循环,让代码更简洁、高效,也更符合Pythonic的风格。

核心思路

你的循环本质是对extdkey_1到extdkey_{maxExtended_Keywords-1}这些列,逐个执行str.extract(":(.*)", expand=True)。Pandas支持直接对多列批量应用字符串方法,不需要手动遍历每一列。

实现代码

精准指定目标列(推荐)

如果明确知道要处理的列范围,用列表推导式生成目标列名,然后直接批量处理:

# 生成需要处理的列名列表
target_cols = [f'extdkey_{i}' for i in range(1, maxExtended_Keywords)]
# 批量应用正则提取并覆盖原列
Extended_Keywords[target_cols] = Extended_Keywords[target_cols].str.extract(":(.*)", expand=True)

按列名前缀筛选(适合列名规律统一的场景)

如果所有需要处理的列都是以extdkey_开头,且没有其他无关列,也可以用filter方法快速选中目标列:

# 筛选所有以'extdkey_'开头的列
target_cols = Extended_Keywords.filter(like='extdkey_').columns
Extended_Keywords[target_cols] = Extended_Keywords[target_cols].str.extract(":(.*)", expand=True)

为什么这更Pythonic?

  • 效率更高:Pandas的向量化操作是底层优化的,比Python级别的for循环快得多(尤其是数据量较大时)。
  • 代码更简洁:一行代码完成批量处理,逻辑清晰,可读性更强。
  • 符合Pandas设计哲学:尽量利用库的内置批量处理能力,避免手动重复造轮子。

小示例验证

假设你的Extended_Keywords初始是这样的:

extdkey_1extdkey_2
key:123key:456
key:789key:012

运行代码后,会变成:

extdkey_1extdkey_2
123456
789012

完全符合你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:47