pandas to_datetime() 函数未针对数据框中的日期 08-12-1600 进行转换

pandas to_datetime() funtion is not converting for date 08-12-1600 in dataframe

raw_data = {'Event': ['A','B','C','D', 'E'],
            'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])

df_1['dates'] = pd.to_datetime(df_1['dates'])

以上代码由于日期 08-12-1600 而出错,如果删除日期它工作正常,可能的原因是什么? 错误是: 越界纳秒时间戳:1600-08-12 00:00:00

那是因为提供的日期超出了Timestamp的范围。

pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')

pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')

详情here

如果我们需要超出范围的日期

然后我们可以使用下面的代码将它们转换为句号

raw_data = {'Event': ['A','B','C','D', 'E'],
            'dates': ['08-12-1600','26-09-1400', '04-11-1991','25-03-1991', '10-05-1991']}
df_1 = pd.DataFrame(raw_data, columns = ['Event', 'dates'])


def conv(x):
    day,month,year = tuple(x.split('-'))
    return pd.Period(year=int(year), month=int(month), day=int(day), freq="D")

df_1['dates'] = df_1.dates.apply(conv)
df_1

输出

    Event   dates
0   A   1600-12-08
1   B   1400-09-26
2   C   1991-11-04
3   D   1991-03-25
4   E   1991-05-10

如果我们可以忽略范围外的日期

df_1['dates'] = pd.to_datetime(df_1.dates, errors='coerce')
df_1

输出

    Event   dates
0   A       NaT
1   B       NaT
2   C       1991-04-11
3   D       1991-03-25
4   E       1991-10-05

奖金事实

为什么时间戳可以保存大约 584 年 1677-2262 的值?

由于时间戳提供纳秒精度并以 64 位整数存储,因此它可以存储大约 584 年,以 64 位 int 的这种纳秒分辨率 space。