Python 准确地将日期格式转换为日期时间,其中包括 1970 年之前的日期
Python convert date format to datetime accurately which includes dates before 1970
将 python 熊猫代码视为
datetest = pd.DataFrame({'year':['02','08',23,32,43,68,70,72,85,94]})
newdate = pd.to_datetime(datetest['year'], format='%y')
print(newdate)
输出:
0 2002-01-01
1 2008-01-01
2 2023-01-01
3 2032-01-01
4 2043-01-01
5 2068-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]
那么如何将 2023、2032、2043、2068 分别转换为 1923、1932、1943、1968 并保持日期时间格式完整?
您可以使用布尔索引和 pandas.DateOffset
将未来的任何日期调整 100 年。
如果此规则过于严格,您可以设置自己的可接受年份阈值:
year = pd.datetime.today().year
# If setting your own threshold year eg.
# year = 2030
newdate.loc[newdate.dt.year.gt(year)] -= pd.DateOffset(years=100)
[出局]
0 2002-01-01
1 2008-01-01
2 1923-01-01
3 1932-01-01
4 1943-01-01
5 1968-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]
将 python 熊猫代码视为
datetest = pd.DataFrame({'year':['02','08',23,32,43,68,70,72,85,94]})
newdate = pd.to_datetime(datetest['year'], format='%y')
print(newdate)
输出:
0 2002-01-01
1 2008-01-01
2 2023-01-01
3 2032-01-01
4 2043-01-01
5 2068-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]
那么如何将 2023、2032、2043、2068 分别转换为 1923、1932、1943、1968 并保持日期时间格式完整?
您可以使用布尔索引和 pandas.DateOffset
将未来的任何日期调整 100 年。
如果此规则过于严格,您可以设置自己的可接受年份阈值:
year = pd.datetime.today().year
# If setting your own threshold year eg.
# year = 2030
newdate.loc[newdate.dt.year.gt(year)] -= pd.DateOffset(years=100)
[出局]
0 2002-01-01
1 2008-01-01
2 1923-01-01
3 1932-01-01
4 1943-01-01
5 1968-01-01
6 1970-01-01
7 1972-01-01
8 1985-01-01
9 1994-01-01
Name: year, dtype: datetime64[ns]