You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动