我有一个名为 df
的 Pandas 数据框,其中包含以下 3 列:id
、creation_date
和 email
。
我想返回 email
列包含任何严格数字组合(必须严格为数字)后跟“加号”然后是任何内容的所有行.
例如:
- 1345677+@gmail.com
, 2345678+556@gmail.com
符合我的标准。
- Testing+22@gmail.com
和 test223+22@gmail.com
不会,因为它们在“加号”之前包含非数字字符。
我知道 df.email.str.contains('\+')
不会工作,因为它会返回包含“加号”的所有内容。我试过 df.filter(['email'], regex=r'([^0-9])' % '\+', axis=0)
但它抛出了一条错误消息读取 TypeError:在字符串格式化期间并非所有参数都已转换
。
谁能给个建议?
非常感谢!
最佳答案
您可以使用contains
,但match
应该足够了:
# example data
data = ["1345677+@gmail.com", "2345678+556@gmail.com",
"Testing+22@gmail.com", "test223+22@gmail.com"]
df = pd.DataFrame(data, columns=["email"])
df
email
0 1345677+@gmail.com
1 2345678+556@gmail.com
2 Testing+22@gmail.com
3 test223+22@gmail.com
现在使用匹配
:
df.email.str.match("\d+\+.*")
0 True
1 True
2 False
3 False
Name: email, dtype: bool
注意 contains
和 match
之间的区别,来自文档:
contains
analogous, but less strict, relying on re.search instead of re.match
关于python - 带有 Pandas 的 REGEX 过滤器(任何数字组合后跟 'plus' 符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236846/