Pandas.to_datetime当日期为9999-01-01时

czfnxgou  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(107)

我已经将一个SQL表读入pandas,现在我想将字符串中的日期转换为pandas的datetime类型。然而,问题是SQL的最大日期为“9999-12-31 23:59:59.9999”,而Pandas的最大日期为2262。
所以我可以做下面的事情,这是非常慢的:

def safe_convert(date):
    try:
        return pd.to_datetime(date)
    except OutOfBoundsDatetime:
        return pd.Timestamp('2262-04-11')

df['start_date'] = df['start_date'].apply(safe_convert)

字符串
一个更快的替代方案如下,但会导致pd.NaTs:

df['start_date'] = pd.to_datetime(df['start_date'], errors='coerce')


难道没有一种方法可以实现第一个,只是以一种性能的方式?

h79rfbju

h79rfbju1#

那么使用第二种选择并填充NaTs呢?

df['start_date'] = (pd.to_datetime(df['start_date'], errors='coerce')
                      .fillna(pd.Timestamp('2262-04-11'))
                   )

字符串
或者,如果您最初有NaTs/NaN,并且不想填充它们:

df['start_date'] = (pd.to_datetime(df['start_date'], errors='coerce')
                      .mask(lambda x: x.isna() & df['start_date'].notna(),
                            pd.Timestamp('2262-04-11'))
                   )

相关问题