Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除不带'的单元格/行;不包含与Python匹配的正则表达式_Python_Regex_Python 2.7_Csv_Pandas - Fatal编程技术网

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

删除不带'的单元格/行;不包含与Python匹配的正则表达式,python,regex,python-2.7,csv,pandas,Python,Regex,Python 2.7,Csv,Pandas,我有一个单栏的csv,其中包含假定的电话号码。但是,有几个单元格包含错误的数字、字母和符号等。我只想保留单元格中正好包含10个数字的每一行,并删除所有其他行 我也有一个文件,其中包含一个奇怪的非ASCII字符,在名字栏中的每个单元格的中间(第一个名字之后)。有没有一种简单的方法可以丢弃文件中的每个非ascii字符?我只是想把它扔掉,不过用一个空格来代替也不错 我已经在CSV上运行的代码中导入了pandas,因此如果这有帮助,它是可用的。首先,让我们生成一些随机电话号码——大多数是好的,一些是坏的

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

我也有一个文件,其中包含一个奇怪的非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!我喜欢人们向我展示答案背后的过程,让我学习。