如何用Pandas筛选仅含单个mm/dd/yyyy格式日期的行?
解决仅提取含单个日期行的问题
你的问题出在原正则只是匹配包含至少一个mm/dd/yyyy格式日期的行,所以两行都会被选中。要筛选仅含一个日期的行,可以用以下两种方法:
方法一:统计日期出现次数(直观易读)
先统计每行中日期的出现次数,再筛选次数为1的行:
import pandas as pd # 假设你的原始DataFrame是df date_pattern = r'\d{2}/\d{2}/\d{4}' # 新增列统计每行日期数量 df['date_count'] = df['string'].str.count(date_pattern) # 筛选仅含一个日期的行,生成目标DataFrame df_result = df[df['date_count'] == 1].copy() # 提取结果列(也可以直接保留原string列) df_result['result'] = df_result['string'] # 清理临时列 df_result = df_result.drop('date_count', axis=1)
方法二:用精确正则匹配(无需临时列)
通过正则匹配整个行仅包含一个日期的情况:
import pandas as pd date_pattern = r'\d{2}/\d{2}/\d{4}' # 构建匹配仅单个日期的正则 single_date_regex = r'^(?:(?!' + date_pattern + r').)*' + date_pattern + r'(?:(?!' + date_pattern + r').)*$' # 筛选符合条件的行 df_result = df[df['string'].str.contains(single_date_regex)].copy() df_result['result'] = df_result['string']
正则解释
^(?:(?!' + date_pattern + r').)*:从行首开始,匹配所有不构成日期模式的字符date_pattern:匹配唯一的一个日期(?:(?!' + date_pattern + r').)*$:匹配日期之后所有不构成日期模式的字符,直到行尾
这样就能精准筛选出仅含一个mm/dd/yyyy格式日期的行。
内容的提问来源于stack exchange,提问作者Nev1111
相关产品推荐
相关产品推荐

