【问题标题】:pandas to_datetime() funtion is not converting for date 08-12-1600 in dataframepandas to_datetime() 函数未转换为数据框中的日期 08-12-1600
【发布时间】:2021-08-06 20:50:26
【问题描述】:
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.x pandas dataframe numpy data-science


【解决方案1】:

这是因为提供的日期超出了时间戳的范围。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2017-01-26
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多