python - 奇怪的日期格式需要放入正确的 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
格式?
解决方案
我要做的是使用一些正则表达式来收集你的所有数据和一些 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
这应该以更易于访问的形式为您提供数据,您可以根据需要使用/格式化
推荐阅读
- java - 如何在 Spring Data JPA Query 中将字符串转换为 IP 地址
- python-3.x - 使用 JSON 数据,python 使用 for 循环构建 REST url
- flutter - Flutter:卡片 UI/UX
- javascript - 在adonis 5中将生产环境更改为测试环境
- python - 我们如何计算数据框中的项目并将结果分配给数据框中的新列?
- c++ - CImg 无法识别 png/jpeg macOS
- firebase - FireStore - 4 周后删除帖子
- python - 计算数组中的元音
- swift - 协议中引用无效关联类型导致的神秘错误
- python - 读取内存中的 doc 文件