删除不带'的单元格/行;不包含与Python匹配的正则表达式
我有一个单栏的csv,其中包含假定的电话号码。但是,有几个单元格包含错误的数字、字母和符号等。我只想保留单元格中正好包含10个数字的每一行,并删除所有其他行删除不带'的单元格/行;不包含与Python匹配的正则表达式,python,regex,python-2.7,csv,pandas,Python,Regex,Python 2.7,Csv,Pandas,我有一个单栏的csv,其中包含假定的电话号码。但是,有几个单元格包含错误的数字、字母和符号等。我只想保留单元格中正好包含10个数字的每一行,并删除所有其他行 我也有一个文件,其中包含一个奇怪的非ASCII字符,在名字栏中的每个单元格的中间(第一个名字之后)。有没有一种简单的方法可以丢弃文件中的每个非ascii字符?我只是想把它扔掉,不过用一个空格来代替也不错 我已经在CSV上运行的代码中导入了pandas,因此如果这有帮助,它是可用的。首先,让我们生成一些随机电话号码——大多数是好的,一些是坏的
我也有一个文件,其中包含一个奇怪的非ASCII字符,在名字栏中的每个单元格的中间(第一个名字之后)。有没有一种简单的方法可以丢弃文件中的每个非ascii字符?我只是想把它扔掉,不过用一个空格来代替也不错
我已经在CSV上运行的代码中导入了pandas,因此如果这有帮助,它是可用的。首先,让我们生成一些随机电话号码——大多数是好的,一些是坏的:
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...
如果要执行此操作,可以使用相同的正则表达式并使用。将应用于数据帧:
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)))]
只需使用一个过滤器:new\u li=[e代表旧中的e\u旧li如果重新搜索(regex,e)]
Perfect!我喜欢人们向我展示答案背后的过程,让我学习。