Странное форматирование даты необходимо поместить в правильный формат Python - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть данные со столбцом дат, который следует в формате MMYY.

Т.е.: 1119 будет ноября 2019 и 1211 будетбыть декабрь 2011 и 110 будет январь 2010 .... и т.д ....

Не только это, но есть Годы в том же столбце, которые должны быть приняты как Декабрь того года, в котором он находится.

То есть: 2011 означает Декабрь 2011 .... и т.д ....

Более того, есть даты, которые имеют нулевой смысл, что когда-либо!

Т.е.: 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 форматы?

1 Ответ

0 голосов
/ 08 декабря 2018

Что бы я сделал, это использовал бы некоторое регулярное выражение, чтобы собрать все ваши данные, и некоторые 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

Это должно дать вам ваши данные в гораздо более доступной форме, которую вы можете использовать / форматировать, как вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...