1

我有一项运行 Pandas 0.25.2 版的服务。该服务从数据库中读取数据并将快照存储为 csv

df = pd.read_sql_query(sql_cmd, oracle)

查询导致数据框具有一些非常大的日期时间值。(例如 3000-01-02 00:00:00)之后我df.to_csv(index=False)用来创建 csv 快照并将其写入文件

在安装了 pandas 0.25.3 的不同机器上,我正在将 csv 文件的内容读入数据框并尝试将日期列的数据类型更改为日期时间。这会导致OutOfBoundsDatetime异常

df = pd.read_csv("xy.csv")
pd.to_datetime(df['val_until'])

pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 3000-01-02 00:00:00

我正在考虑使用 pickle 创建快照并直接加载数据帧。但是,我很好奇为什么 pandas 能够在第一种情况下处理大日期时间而不是在第二种情况下。也感谢我如何继续使用 csv 作为传输格式的任何建议

4

1 回答 1

2

我相信我明白了。

在第一种情况下,我不确定存储在 sql 数据库中的实际数据类型是什么,但如果没有另外指定,将其读入 df 可能会导致某些泛型或字符串类型具有更高的溢出值.

但最终,它以一个字符串类型的 csv 文件结束。这可以是令人难以置信的(无限?)长而没有任何溢出,而您尝试使用pandas.to_datetime文档转换的数据类型。根据底部第一个文档链接中显示的 Timestamp.max,最大值为_'2262-04-11 23:47:16.854775807' 。

于 2019-11-08T15:26:56.160 回答