Pandas中使用str.extract提取[3-6]X格式子串的问题
从Pandas字符串序列提取匹配
[3-6]X的子串 我需要从Pandas序列的任意字符串(例如"Hello this is an 6X interesting sentence")中提取匹配正则表达式[3-6]X的子串,也就是3X、4X、5X或6X。
我花了好几个小时尝试各种方案、查阅正则资料,但平时极少用到正则,实在不想深入研究。之前都是找现成正则改改就能用,但这次遇到了大麻烦,搞不清是正则模式写错了,还是Pandas的用法有问题。
以下代码是能正常工作的:
df.some_column.str.extract("([3-6])").fillna(False)df.some_column.str.contains("[3-6]X").fillna(False)
这些代码既能匹配到目标数字,也能正确标记大量不匹配的行。
我试过多种写法(包括在extract前链式调用astype(str)),但都无效,比如:
df.some_column.str.extract("([3-6]X)").fillna(False)df.some_column.str.extract("([3-6]{X})").fillna(False)df.some_column.str.extract("(\b[3-6])").fillna(False)
我还尝试了单词边界,但导致extract完全匹配失败——明明所有目标数字都是用空格分隔的,这让我很困惑。
最小可复现示例(MWE)
from pandas import DataFrame df = DataFrame({'a': ['sdfasd 3X dsflkjsafd', 'sdfpoiusdf 4X cat dog', 'cat dog hamburger']}) # 预期结果 >>> df[df.a.str.contains("[3-6]X", na=False)].a 0 sdfasd 3X dsflkjsafd 1 sdfpoiusdf 4X cat dog Name: a, dtype: object # 实际结果(但在这个示例里表现正常...) >>> df.a.str.extract("([3-6]X)") 0 3X 1 4X 2 NaN Name: a, dtype: object
内容的提问来源于stack exchange,提问作者johnrobot
相关产品推荐
相关产品推荐

