Python DataFrame提取子串:如何高效获取-B-或B之前的内容?
高效提取DataFrame ID列的目标子串
针对你提到的ID固定格式(开头为若干字母+数字,后续紧跟-B-或B),完全没必要用for循环处理,直接用pandas内置的字符串操作就能高效实现,比循环快得多,给你两种实用方案:
方案1:用str.extract精准匹配前缀
写正则直接匹配开头的字母+数字序列,正则^([A-Za-z]+\d+)的作用是从字符串起始位置,匹配连续的字母加数字组合:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'id': ['A12-B-56', 'E1234B115']}) # 提取目标前缀 df['target_prefix'] = df['id'].str.extract(r'^([A-Za-z]+\d+)')
运行后target_prefix列会得到['A12', 'E1234'],完全符合你的需求。
方案2:用str.split按分隔符拆分
把-B-和B作为拆分分隔符,直接取拆分后的第一个元素:
df['target_prefix'] = df['id'].str.split(r'-B-|B').str[0]
这个方法逻辑更直观,直接按两种可能的分隔符拆分字符串,取第一部分即可。
这两种都是pandas的矢量化操作,内部做了底层优化,数据量越大,对比for循环的效率优势越明显,完全不用手动遍历每一行处理。
内容的提问来源于stack exchange,提问作者user398843
相关产品推荐
相关产品推荐

