删除不包含与 Python 匹配的正则表达式的单元格/行
Posted
技术标签:
【中文标题】删除不包含与 Python 匹配的正则表达式的单元格/行【英文标题】:Removing cells/rows that don't contain regex match with Python 【发布时间】:2014-01-25 20:06:25 【问题描述】:我有一个包含据称电话号码的单列的 csv。但是,有几个单元格包含错误的数字、字母和符号等。我只想保留单元格中正好包含十个数字的每一行,并删除所有其他行。
我还有一个文件,在名称列的每个单元格中间(在名字之后)包含一个奇怪的非 ascii 字符。有没有一种简单的方法可以丢弃文件中的每个非 ascii 字符?我只是想摆脱它,尽管用空格替换它也可以。
我已经在我的 csvs 上运行的代码中导入了 pandas,所以如果有帮助,它是可用的。
【问题讨论】:
只需使用过滤器:new_li=[e for e in old_old_li if re.search(regex, e)]
【参考方案1】:
首先,让我们生成一些随机电话号码——大多数是好的,一些是坏的:
import random
li=[]
for i in range(50):
li.append('--'.format(random.randrange(1,999), random.randrange(1,999), random.randrange(100,9999)))
然后过滤那些:
import re
new_li=[e for e in li if re.match(r'\d\d\d-\d\d\d-\d\d\d\d', e)]
print new_li
print set(li)-set(new_li) # show the ones removed...
如果您想要使用 Pandas,您可以使用相同的正则表达式并将 .apply
用于 DataFrame:
df=pd.DataFrame(li, columns=['Phone'])
pat=re.compile(r'^\d3-\d3-\d4$')
print df
print df[df['Phone'].apply(lambda s: bool(pat.search(s)))]
【讨论】:
完美!我喜欢人们真正向我展示答案背后的过程,以便我学习。以上是关于删除不包含与 Python 匹配的正则表达式的单元格/行的主要内容,如果未能解决你的问题,请参考以下文章