python - Python - 连续转换日期时间对象,同时保持非日期时间对象相同
问题描述
我有以下系列:
myseries = pd.Series([' Period : From 1 February 2020 to 31 January 2021',
' Period : 1 January 2020 to 31 December 2020',
' Period 67 months',
' Period: 8 Months'])
我想将有两个日期(只有前两个)的日期时间对象转换为日期时间格式,同时保持其他日期的原始格式。
IE -[('02-01-2020', '01-31-2021'), ('01-01-2020', '12-31-2020'), 'Period: 67 Months', 'Period: 8 Months']
我尝试了以下方法,但我得到了一个日期时间对象,用于那些没有正确日期的对象。
for i,v in myseries.iteritems():
matches = list(datefinder.find_dates(v))
if len(matches) > 0:
print(matches)
我尝试使用staticmethod
datefinder's 中的参数find_dates()
,它给了我以下信息。我可以使用它,但是我无法提取我需要的对象。
[(datetime.datetime(2020, 2, 1, 0, 0), '1 February 2020'), (datetime.datetime(2021, 1, 31, 0, 0), '31 January 2021')]
[(datetime.datetime(2020, 1, 1, 0, 0), '1 January 2020'), (datetime.datetime(2020, 12, 31, 0, 0), '31 December 2020')]
[(datetime.datetime(2067, 4, 4, 0, 0), '67 mon')]
[(datetime.datetime(2020, 4, 8, 0, 0), '8 Mon')]
我想要的输出是 2 个列表:
date_1 = ['1 February 2020', '1 January 2020', '67 mon', '8 Mon']
date_2 = ['31 January 2021', '31 December 2020', '67 mon', '8 Mon']
解决方案
国际大学联盟:
myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2] if not pd.isna(x) else [])
基本上,使用 source 参数获取原始日期,然后如果日期列表大于 2,则获取第一个 2。
如果你想要 date_1 和 date_2:
date_1 = []
date_2 = []
dates = myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2])
for date in dates:
if len(date)==0:
date_1.append(np.nan)
date_2.append(np.nan)
if len(date)>0:
date_1.append(date[0])
if len(date)>1:
date_2.append(date[1])
elif len(date)>0:
date_2.append(date[0])
推荐阅读
- python - 在 Jupyter 中的一个 matplotlib 图上有 2 个 Ipywidgets - Python
- php - 在 PHP 中实现和理解适配器模式
- laravel - Laravel 两个网站一个认证
- go - 如何检查随机性?
- python - 连接到 Flask SocketIO 实现
- java - 使 ContentPane 可聚焦
- javascript - CDOSYS CreateMHTMLBody 的 HTML 文件中的 Javascript 不工作
- html - 使用 HTML 直接在网站上播放来自 YouTube 的视频
- java - 如何确保 I/O 流的关闭?
- apache - 了解为什么 htaccess 更改有效