Python多日期格式统一转换:解决“未转换数据残留”错误
解决日期解析时的“未转换数据残留”错误
你的问题很典型——因为你的日期数据存在多种格式(两位年份/四位年份、单/双位日/月),但你的解析函数只固定使用了%d/%m/%y这一种格式,导致遇到四位年份的日期时,%y只能匹配最后两位数字,剩下的前两位数字无法被转换,就抛出了“未转换数据残留”的错误。
解决方案:尝试多种日期格式解析
我们可以写一个兼容多种格式的解析函数,通过try-except块逐个尝试可能的日期格式,直到找到匹配的格式为止。而且你不用担心单/双位的日或月,因为strptime的%d和%m格式符本身就支持匹配单数字(比如8)或双数字(08)的日/月,所以只需要覆盖年份的两种情况即可。
下面是修改后的解析函数:
import datetime as dt def parse_date(date_str): if not date_str: # 处理空字符串的情况 return None # 列出所有可能的日期格式,覆盖两位和四位年份的情况 possible_formats = ['%d/%m/%Y', '%d/%m/%y'] for fmt in possible_formats: try: # 解析成功就返回日期对象 return dt.datetime.strptime(date_str, fmt).date() except ValueError: # 格式不匹配就继续尝试下一种 continue # 如果所有格式都不匹配,返回None(也可以根据需求抛出自定义错误) return None
测试示例
这个函数可以完美处理你给出的所有示例:
parse_date('12/8/2017')→ 返回datetime.date(2017, 8, 12)parse_date('27/08/17')→ 返回datetime.date(2017, 8, 27)parse_date('8/9/2017')→ 返回datetime.date(2017, 9, 8)
应用到数据集
现在你可以安全地把这个函数应用到你的数据集上了:
data.Date = data.Date.apply(parse_date)
内容的提问来源于stack exchange,提问作者vishnu prashanth




