删除不包含正则表达式的单元格/行与Python匹配

时间:2014-01-07 22:42:52

标签: python regex python-2.7 csv pandas

我有一个包含所谓电话号码的单列的csv。但是,有几个单元格包含错误的数字,字母和符号等。我只想保留其单元格中包含十个数字的每一行并删除所有其他行。

我还有一个文件,其中包含名称列中每个单元格中间的一个奇怪的非ascii字符(在第一个名称之后)。是否有一种简单的方法可以丢弃文件中的每个非ascii字符?我只是想摆脱它,虽然用空格替换也没关系。

我已经在我在csvs上运行的代码中导入了pandas,所以如果这有帮助,那就可以了。

1 个答案:

答案 0 :(得分:3)

首先,让我们生成一些随机的电话号码 - 大部分都会好,有些不好:

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'^\d{3}-\d{3}-\d{4}$')
print df
print df[df['Phone'].apply(lambda s: bool(pat.search(s)))]