如何在DataFrame中过滤以b开头后跟随机6位数字的字符串
用正则表达式实现Pandas中匹配固定前缀+6位数字的筛选需求
嘿,刚好碰到过类似的场景,用Pandas的字符串方法结合正则表达式就能轻松搞定!
你的需求是匹配b开头后跟6位随机数字的片段,完全可以通过str.contains()搭配正则规则实现,具体步骤如下:
1. 筛选包含目标片段的行
假设你的DataFrame名为df,待处理的列是target_col,执行以下代码就能筛选出符合条件的行:
# 筛选包含"b+6位数字"格式的行,na=False避免空值报错 filtered_rows = df[df['target_col'].str.contains(r'b\d{6}', na=False)]
正则规则解释:
r'':表示原始字符串,防止Python转义字符干扰正则匹配b:匹配固定的前缀字符b\d:匹配任意一个数字(0-9){6}:指定前面的\d必须连续出现6次,也就是正好6位数字
2. 提取6位数字本身
如果除了筛选,还需要把这6位数字单独提取出来作为新列,可以用str.extract():
# 捕获并提取b后面的6位数字,生成新列extracted_id df['extracted_id'] = df['target_col'].str.extract(r'b(\d{6})')
这里的括号()是正则的捕获组,会把括号内匹配到的内容单独提取出来,结果就是你要的6位数值片段。
额外注意事项
- 如果需要忽略大小写(比如可能出现
B开头的情况),可以添加case=False参数:df[df['target_col'].str.contains(r'b\d{6}', na=False, case=False)] - 若列中存在
NaN值,一定要加上na=False,否则会因无法判断空值的匹配结果而抛出错误。
内容的提问来源于stack exchange,提问作者C Wheezy
相关产品推荐
相关产品推荐

