regex - 如何提取 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
如果你df
是pd.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
推荐阅读
- c# - .OnModelCreating 导致超时和异常
- c++ - 什么是从 CSV 文件中提取每个条目字段的最佳方法
- android - 如何将opencv与android studio 3.4.1版的C++原生集成
- excel - 保持甘特图范围条件格式
- xml - 我需要在根之后添加一个元素,在根之后添加一个元素
- c# - System.Linq.Dynamic.DynamicExpression 使用枚举参数解析表达式
- java - HttpClientErrorException: 403 Forbidden in spring application
- c# - 如何转换这些顶点或渲染它们?
- javascript - this.context 在 componentDidMount 上为空,但仅在测试时
- javascript - 更改 FullCalendar 事件的 backgroundColor (v4)