【发布时间】:2018-06-25 15:07:27
【问题描述】:
我从如下数据框开始:
In [24]: df = pd.DataFrame(
...: {'date1': ['10/02/2012', '10/02/2012', 'NA/NA/2014', 'NA/NA/2014', '01/02/2014'],
...: 'date2': ['10-Nov', '19-Oct', '26-Nov', '23-Oct', '14-Oct'],
...: 'date3': ['30/06/2011', '30/06/2011', '30/06/2013', '30/06/2013', 'NA']})
...:
In [25]: df
Out[25]:
date1 date2 date3
0 10/02/2012 10-Nov 30/06/2011
1 10/02/2012 19-Oct 30/06/2011
2 NA/NA/2014 26-Nov 30/06/2013
3 NA/NA/2014 23-Oct 30/06/2013
4 01/02/2014 14-Oct NA
我已设法将日期转换为日期时间对象。因此我有以下数据框:
In [26]: df["date1"] = pd.to_datetime(df["date1"], errors="coerce", dayfirst=True, infer_datetime_format=True)
...: df["date3"] = pd.to_datetime(df["date3"], errors="coerce", dayfirst=True, infer_datetime_format=True)
...: df["date2"] = pd.to_datetime(df["date2"], errors="coerce", dayfirst=True, format="%d-%b")
...: df
...:
Out[26]:
date1 date2 date3
0 2012-02-10 1900-11-10 2011-06-30
1 2012-02-10 1900-10-19 2011-06-30
2 NaT 1900-11-26 2013-06-30
3 NaT 1900-10-23 2013-06-30
4 2014-01-02 1900-10-14 NaT
因为date2 没有year 编码将所有year 值设置为1900。
但是,我需要在date3 之后到达date2 中的第一个日期,并且此日期时间与year 相关联。
当date3 是NaT 时,我需要从date1 向后看,填写date2 的年份。这个可以看df.iloc[4,:]
所以我希望输出日期帧是:
date1 date2 date3
0 2012-02-10 2011-11-10 2011-06-30
1 2012-02-10 2011-10-19 2011-06-30
2 NaT 2013-11-26 2013-06-30
3 NaT 2013-10-23 2013-06-30
4 2014-01-02 2013-10-14 NaT
这比只使用date3.year 更难,因为有时date3 是在今年晚些时候(例如30/12/2013 -> 2013-12-30),所以date2 将是明年的第一个日期(即@ 987654341@ -> 1900-10-14 -> 2014-10-14)。
此外,当它返回 nan 时,我需要我的日期时间足够强大以返回 NaT。
所以我需要在date3 之后找到与date2 中的day-month 匹配的下一个year。或者,如果缺少,我需要 year BEFORE date1 与 date2 中的 day-month 匹配。
【问题讨论】:
标签: python python-3.x pandas datetime dataframe