Python Pandas中验证DataFrame列日期格式的问题
问题描述
我有一个Pandas DataFrame,需要先验证DATE_DELIVERY列的所有数据是否符合MM/DD/YYYY格式,再继续执行程序。我使用了以下代码:
rowNum = 0 for dateValue in dataFrame['DATE_DELIVERY']: try: rowNum += 1 dateValue = datetime.datetime.strftime(dateValue, '%m/%d/%Y') except: print(f"%%%%%% ERROR ---> INCORRECT DATE FORMAT: {dateValue}, DATE FORMAT SHOULD BE: MM/DD/YYYY") sys.exit()
但这段代码触发了异常分支,输出如下:
%%%%%% ERROR ---> INCORRECT DATE FORMAT: 01/01/2022 ON ROW #2, DATE FORMAT SHOULD BE: MM/DD/YYYY
注:该日期从CSV文件读取,格式为'01/01/2022'。我不知道问题出在哪里,请问还有其他验证日期格式的方法吗?
问题原因
你用错了方法:datetime.datetime.strftime()的作用是将已经是datetime类型的对象格式化为字符串,但从CSV读取的dateValue是字符串类型,不是datetime对象,所以调用这个方法会直接抛出异常,和日期格式本身无关。
解决方法
方法1:用strptime逐个验证字符串格式
strptime()是将字符串解析为datetime对象,能成功解析说明格式符合要求:
import datetime import sys rowNum = 0 for dateValue in dataFrame['DATE_DELIVERY']: rowNum += 1 try: # 尝试将字符串按指定格式解析为datetime datetime.datetime.strptime(dateValue, '%m/%d/%Y') except ValueError: print(f"%%%%%% ERROR ---> INCORRECT DATE FORMAT: {dateValue} ON ROW #{rowNum}, DATE FORMAT SHOULD BE: MM/DD/YYYY") sys.exit()
方法2:用Pandas批量验证(更高效)
利用Pandas的to_datetime()方法,结合errors='coerce'将不符合格式的日期转为NaT(缺失日期值),然后检查是否存在这类值:
import pandas as pd # 生成验证后的日期列,不符合格式的转为NaT valid_dates = pd.to_datetime(dataFrame['DATE_DELIVERY'], format='%m/%d/%Y', errors='coerce') # 找出所有格式错误的行 invalid_rows = dataFrame[valid_dates.isna()] if not invalid_rows.empty: for idx, row in invalid_rows.iterrows(): print(f"%%%%%% ERROR ---> INCORRECT DATE FORMAT: {row['DATE_DELIVERY']} ON ROW #{idx+1}, DATE FORMAT SHOULD BE: MM/DD/YYYY") sys.exit()
这种方法避免了循环遍历,处理大DataFrame时效率更高。
方法3:正则表达式匹配格式(仅验证格式,不验证日期合法性)
如果只是想快速匹配MM/DD/YYYY的字符串格式,可以用正则表达式,但注意这种方法无法验证日期的实际合法性(比如02/30/2022这种格式正确但不存在的日期会被误判为合法):
import re import sys date_pattern = re.compile(r'^\d{2}/\d{2}/\d{4}$') rowNum = 0 for dateValue in dataFrame['DATE_DELIVERY']: rowNum += 1 if not date_pattern.match(dateValue): print(f"%%%%%% ERROR ---> INCORRECT DATE FORMAT: {dateValue} ON ROW #{rowNum}, DATE FORMAT SHOULD BE: MM/DD/YYYY") sys.exit()
内容的提问来源于stack exchange,提问作者Marco Somoza
相关产品推荐
相关产品推荐

