【发布时间】:2021-07-20 04:43:13
【问题描述】:
我正在尝试标记任何包含用户定义的“不正确”字符的记录。在这种情况下,记录二 (2) 应作为无效记录返回,但我似乎捕获了记录 1 或 3。这些将被视为“正确”。 关于为什么这些被标记而不是“错误记录”的任何建议?
import pandas as pd
import numpy as np
import re
data = {'HOME1': ['123 Main St', '567\ Country Road', 'PO Box 900']}
dft = pd.DataFrame(data)
from itertools import chain
chars =[]
acceptable = [x for x in chain(range(48,58),range(32,33), range(65,91), range(97,123))]
for ch in acceptable:
chars.append(chr(ch))
reg_list = map(re.compile,chars)
for x in dft['HOME1']:
print(x)
if any(re.match(x) for re in reg_list):
conditions = [dft['HOME1'].apply(lambda x: x)!=x, dft['HOME1'].apply(lambda x: x)==x]
choices = [0,1]
dft['NonValidHOME1'] = np.select(conditions,choices,default=0)
try:
print(dft.groupby(['NonValidHOME1'])[['HOME1']].filter(lambda x: len(x) ==1).agg(lambda x: x.tolist()))
except:
print("no invalid Home1")
【问题讨论】:
-
我认为您需要删除
reg_list = map(re.compile,chars)并将if any(re.match(x) for re in reg_list):替换为if any(c in x for c in chars):(如果x是一个字符串)。如果您只是从字符串中的列表中检查单个字符,则不需要正则表达式。
标签: python regex pandas dataframe