转换熊猫的出生日期

时间:2021-05-11 14:01:23

标签: python pandas dataframe

我正在尝试将熊猫的出生日期从 mm/dd/yy 转换为 mm/dd/yyyy。请参阅下面的屏幕截图:

see image by clicking here. my reputation isn't a 10 yet!

我遇到的问题是从出生日期转换

06/13/54
04/15/70

对于 mm/dd/yyyy 格式,它假设日期在 2000 年。显然,这些用户甚至还没有出生。是否有一个函数或东西可以用来确保转换正确完成或尽可能正确。对于这种情况,我们假设没有用户活到 90 岁以上。

3 个答案:

答案 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