Дальние даты преобразуются в объект datetime.datetime вместо datetime64 [ns] - PullRequest
0 голосов
/ 01 марта 2019

Я написал следующий код:

date_format = lambda x: datetime.strptime(x, "%d-%b-%Y") if x!=0 else np.nan

input_file['Business date']    = input_file['Business date'].fillna(0).apply(date_format)
input_file['Date of the Flow'] = input_file['Date of the Flow'].fillna(0).apply(date_format)

Когда я беру уникальный столбец «Бизнес-дата», он показывает вывод в виде:

input_file["Business date"].unique()
Out[61]: array(['2019-02-15T00:00:00.000000000', '2019-02-18T00:00:00.000000000'], dtype='datetime64[ns]')

И для «Дата потока»":

input_file["Date of the Flow"].unique()
Out[64]: 
array([nan, datetime.datetime(2019, 9, 18, 0, 0),
       datetime.datetime(2023, 3, 24, 0, 0), ...,
       datetime.datetime(2028, 7, 15, 0, 0),
       datetime.datetime(2122, 12, 19, 0, 0),
       datetime.datetime(2026, 11, 28, 0, 0)], dtype=object)

Почему он так себя ведет?Также обратите внимание, что в столбце «Дата потока» есть даты года 2505. Если я удаляю эти даты, вывод будет такой же, как и «Деловая дата», т.е. dtype = 'datetime64 [ns]'

1 Ответ

0 голосов
/ 06 марта 2019

Я нашел проблему.Кажется, что временной ряд в Python имеет ограничение / диапазон.Из-за чего моя дата в 2505 году приходила в формате datetime, а не в метке времени.Нашел его по следующей ссылке: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

Поскольку pandas представляет метки времени в наносекундном разрешении, промежуток времени, который можно представить с помощью 64-разрядного целого числа, ограничен примерно 584 годами:

In [90]: pd.Timestamp.min
Out[90]: Timestamp('1677-09-21 00:12:43.145225')

In [91]: pd.Timestamp.max
Out[91]: Timestamp('2262-04-11 23:47:16.854775807')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...