首页 > 解决方案 > pandas to_datetime() 函数未转换为数据框中的日期 08-12-1600

问题描述

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

标签: python-3.xpandasdataframenumpydata-science

解决方案


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

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

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

详情在这里

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

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

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 位整数中,因此它可以在 64 位 int 空间中以这种纳秒分辨率存储大约 584 年。


推荐阅读