我正在尝试将熊猫的出生日期从 mm/dd/yy 转换为 mm/dd/yyyy。请参阅下面的屏幕截图:
我遇到的问题是从出生日期转换
06/13/54
04/15/70
对于 mm/dd/yyyy 格式,它假设日期在 2000 年。显然,这些用户甚至还没有出生。是否有一个函数或东西可以用来确保转换正确完成或尽可能正确。对于这种情况,我们假设没有用户活到 90 岁以上。
答案 0 :(得分:2)
您真的不应该strftime
回到 very bad, not good mm-dd-yy 格式,而应该将内容保留为 Pandas datetime
。
无论哪种方式,您都可以想出一个修复“糟糕”日期的函数并.apply()
- 这是使用单个pd.Series
,但无论如何数据帧都是由这些组成的,所以你明白了。
>>> s = pd.Series(["06/13/54", "04/15/70"])
>>> s2 = pd.to_datetime(s)
0 2054-06-13
1 2070-04-15
dtype: datetime64[ns]
>>> def fix_date(dt):
... if dt.year >= 2021: # change threshold accordingly
... return dt.replace(year=dt.year - 100)
... return dt
...
>>> s3 = s2.apply(fix_date)
0 1954-06-13
1 1970-04-15
dtype: datetime64[ns]
>>>
答案 1 :(得分:2)
如果是未来,只需替换年份?
x = pd.to_datetime('06/13/54',format='%m/%d/%y')
if x>datetime.datetime.now():
x.replace(year=x.year-100)
答案 2 :(得分:1)
输入
df = pd.DataFrame({'date':["06/13/54", "04/15/70"]})
df.date = pd.to_datetime(df.date, format='%m/%d/%y')
df
输入df
date
0 2054-06-13
1 1970-04-15
代码
df.date = df.date.mask(df.date.gt(pd.Timestamp('today')), df.date-pd.DateOffset(years=100))
df
输出
date
0 1954-06-13
1 1970-04-15