панды, поднимающие OutOfBoundsDatetime на CSV, но не на SQL - PullRequest
1 голос
/ 08 ноября 2019

У меня есть один сервис под управлением панды версии 0.25.2. Эта служба считывает данные из базы данных и сохраняет снимок в виде csv

df = pd.read_sql_query(sql_cmd, oracle)

результата запроса в кадре данных с некоторыми очень большими значениями даты и времени. (например, 3000-01-02 00:00:00) После этого я использую df.to_csv(index=False), чтобы создать снимок csv и записать его в файл

на другой машине с установленными пандами 0.25.3, я читаюсодержимое файла csv в фрейм данных и попытайтесь изменить тип данных столбца даты на datetime. Это приводит к 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 в качестве формата передачи

1 Ответ

2 голосов
/ 08 ноября 2019

Я верю, что понял.

В первом случае я не уверен, какой фактический тип данных хранится в базе данных sql, но если не указано иное, чтение его в df может привести к некоторому универсальному или строковому типу, которыйимеет намного более высокое значение переполнения.

В конце концов, в конечном итоге это файл CSV, который является строковым типом. Это может быть невероятно (бесконечно?) Длинным без какого-либо переполнения, тогда как тип данных, который вы пытаетесь преобразовать, используя pandas.to_datetime docs. имеет максимальное значение _ '2262-04-11 23: 47: 16,854775807' в соответствии с Timestamp.max, показанным в первой ссылке документа внизу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...