如何解决过滤不遵循python中正则表达式模式的字符串
我想从未遵循特定模式的pandas数据框中过滤字符串。但是我只得到一个空的数据框
我的代码
l = ['Dubai','St. Petersburg','Aachen','21323','123134','Klaus@facebook.com']
l = pd.DataFrame(l)
pattern = re.compile("([A-Z])\w+|(\w[A-Z\u00E4-\u02AF])\w+",re.UNICODE)
df = l.filter(regex=pattern)
print(df)
输出:
Empty DataFrame
Columns: []
Index: [0,1,2,3,4,5]
预期输出:
0
0 Dubai
1 St. Petersburg
2 Aachen
3 None
4 None
5 None
解决方法
df.filter()
方法根据行/列的名称而不是其内容进行过滤;如文档中所述:“请注意,此例程不会在其内容上过滤数据框。过滤器将应用于索引的标签。”
要做您想做的事,您可以定义一个可以进行模式匹配的函数:
import numpy as np
import re
def like(x,pattern):
r = re.compile(pattern)
vlike = np.vectorize(lambda val: bool(r.fullmatch(val)))
return vlike(x)
然后将其传递给.loc[]
:
df = df.loc[like(df['column_name'],pattern),:]
现在,df应该只包含“ column_name”列与给定模式匹配的行。
您可以在this article中看到一个示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。