我有一个包含所谓电话号码的单列的csv。但是,有几个单元格包含错误的数字,字母和符号等。我只想保留其单元格中包含十个数字的每一行并删除所有其他行。
我还有一个文件,其中包含名称列中每个单元格中间的一个奇怪的非ascii字符(在第一个名称之后)。是否有一种简单的方法可以丢弃文件中的每个非ascii字符?我只是想摆脱它,虽然用空格替换也没关系。
我已经在我在csvs上运行的代码中导入了pandas,所以如果这有帮助,那就可以了。
答案 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)))]