远期日期被转换为datetime.datetime对象,而不是datetime64 [ns]

时间:2019-03-01 06:52:12

标签: python python-3.x datetime spyder

我写了以下代码:

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 :(得分:0)

我发现了问题。似乎Python中的时间序列具有限制/范围。因此,我在2505年的日期是以日期时间格式而不是时间戳记的。在以下链接中找到它:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

由于熊猫以纳秒分辨率表示时间戳,因此可以使用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')