python-3.x - 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
解决方案
这是因为提供的日期超出了 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 年。
推荐阅读
- javascript - 如何以保留顺序的方式找到两个可能有重复的 javascript 数组的差异
- c# - 图片框的 C# 碰撞检查(相交)
- java - android socket连接使用socket.io 0.9.0版本
- hive - 如何以“。”分隔的字符串形式比较版本号?
- angular - 即使应用程序运行良好,NgRx Redux devtools 也没有显示存储和状态详细信息
- php - 如何仅返回在 Twig 模板、Rainlab.Translate 模块中具有翻译的文章
- javascript - 在 node.js 上使用 jqplot?
- java - OSGI 缓存目录
- c# - 实体框架 - 同时使用 FK 插入父模型和子模型
- c# - ASPX 页面有重复的行,即使它们在 SQL 中没有重复