我的数据带有遵循MMYY格式的日期列。
即: 1119 将是 2019年11月,而 1211 将是 2011年12月和 110 < / strong>将会是 2010年1月 .. etc ....
不仅如此,同一列中还有年,需要将该年的十二月作为年份。
即: 2011 是 2011年12月 .. etc ....
此外,有些日期使零意义变得如此!
即: 1616 ,应该是..... 2016年2月1日?
需要完全忽略这些内容(除非有人理解此格式,但我不明白!)
此数据的片段如下所示:
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
格式?
答案 0 :(得分:0)
我要做的是使用一些正则表达式来收集所有数据,并在此处和那里使用一些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
这应该以一种更易于访问的形式为您提供数据,您可以根据需要使用/格式化