首页 > 解决方案 > 奇怪的日期格式需要放入正确的 Python 格式

问题描述

我有一个日期列遵循 MMYY 格式的数据。

即:1119表示2019 年 11 月1211表示2011 年 12 月110表示2010 年 1 月....etc....

不仅如此,同一列中的年份也需要被视为无论是哪一年的十二月。

即:2011年是2011年12月......等等......

此外,有些日期是零意义的!

即:1616这将是..... Janfebrune 2016???

这些需要完全忽略(除非有人理解这种格式,但我就是不明白!)

此数据的片段如下所示:

Year  Month  State  Contract   Exp Date
2010  1      OH     S          2017
2010  2      OH     C          1119
2010  1      AK     S          1234
2010  2      AK     S          1616

我该怎么做才能将这些奇怪的日期更改为datetime格式?

标签: pythonpython-3.xpython-2.7datetimeformat

解决方案


我要做的是使用一些正则表达式来收集你的所有数据和一些 ifs 来检查它+你对那个 Exp_date 的解释(我不完全确定......,这可能只是一个需要的简单练习您以特定格式提取数据)

import re

def split_exp_date( date):
    if len(date) > 4:
        return None
    month = int( date[:2])
    year = int( '20' + date[2:])
    if not 0 < month < 13:
        return None

    return month, year

test  = """
Year  Month  State  Contract   Exp Date
2010  1      OH     S          2017
2010  2      OH     C          1119
2010  1      AK     S          1234
2010  2      AK     S          1616
"""

r = re.compile( r'\n(?P<Year>[\d]+) +(?P<Month>[\d]{1,2}) +(?P<State>[\w]+) +(?P<Contract>[\w]+) +(?P<Exp_Date>[\d]+)')

res = r.finditer( test)

for e in res:
    print( e.groupdict())
    split_exp_date( e['Exp_Date'])
    Year = e['Year']
    Month = e['Month']
    State = e['State']
    Contract = e['Contract']
    Exp_Date = split_exp_date( e['Exp_Date'])

    print( Exp_Date)

#{'Year': '2010', 'Month': '1', 'State': 'OH', 'Contract': 'S', 'Exp_Date': '2017'}
#None
#{'Year': '2010', 'Month': '2', 'State': 'OH', 'Contract': 'C', 'Exp_Date': '1119'}
#(11, 2019)
#{'Year': '2010', 'Month': '1', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1234'}
#(12, 2034)
#{'Year': '2010', 'Month': '2', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1616'}
#None

这应该以更易于访问的形式为您提供数据,您可以根据需要使用/格式化


推荐阅读