如何提取数据框列中 reg 表达式不匹配的位置?



我有两个数据帧:

OrderedDict([('page1',     name       dob
0   John  07-20200
1  Lilly   05-1999
2  James   02-2002), ('page2',      name       dob
0   Chris   07-2020
1  Robert   05-1999
2    barb  02-20022)])

我想对两个数据帧中的每个日期运行我的reg表达式,如果它们都匹配,我想继续我的程序,如果没有匹配,我要打印一条消息,显示df名称、索引和日期的错误情况,如下所示:

INVALID DATE: Page1: index 0: dob: 02-20200
INVALID DATE: Page2: index 2: dob: 02-20022

我到了这个地步

date_pattern = r'(?<!d)((?:0?[1-9]|1[0-2])-(?:19|20)d{2})(?!d)'
for df_name, df in employee_dict.items():
x = df[df.dob.str.contains(date_pattern, regex=True)]
print(x)

它以表格格式打印它们匹配的地方,但我想在单个打印语句中打印它们不匹配的地方

有什么想法吗?

您可以遍历数据帧的所有行,如果条目与您的模式不匹配,则可以生成您选择的消息:

for df_name, df in employee_dict.items():       # Iterate over your DFs
for index, row in df.iterrows():              # Iterate over DF rows 
if not re.search(date_pattern, row['dob']): # If the dob column value has no match
print("INVALID DATE: {}: index {}: dob: {}".format(df_name, index,row['dob']))  # Print error message

如果你的dfpd.DataFrame({'dob': ['05-2020','4-2020','07-1999','2-2001','1-20202020','112-2020']}),结果将是

INVALID DATE: page1: index 4: dob: 1-20202020
INVALID DATE: page1: index 5: dob: 112-2020

您正在寻找Series.str.match

从本质上讲,您需要提取dob系列,我认为这就是您对df['dob']result = df['dob'].str.match(date_pattern)所做的。结果将是一系列TrueFalse值,对应于它们各自的df['dob']值。

最新更新