Python 将字符串转换为日期类型。1678年1月1日发生了什么?

Python 将字符串转换为日期类型。1678年1月1日发生了什么?,python,pandas,dataframe,date,datetime,Python,Pandas,Dataframe,Date,Datetime,将dataframe列的字符串数据转换为datetime时,我遇到了以下问题: import pandas as pd mydates = {'a':'2008-04-11','b':'2007-06-14','c':'2001-01-08','d':'2001-07-31'} myDF = pd.DataFrame.from_dict(mydates,orient='index', columns=['dates']) 现在,为了将字符串转换为datetype,我按如下步骤进行操作: myD

将dataframe列的字符串数据转换为datetime时,我遇到了以下问题:

import pandas as pd
mydates = {'a':'2008-04-11','b':'2007-06-14','c':'2001-01-08','d':'2001-07-31'}
myDF = pd.DataFrame.from_dict(mydates,orient='index', columns=['dates'])
现在,为了将字符串转换为datetype,我按如下步骤进行操作:

myDF['as_date'] = pd.to_datetime(myDF['dates'].astype('str').str.replace('-',''), format='%Y%m%d')
都很好

但是。。。 我开始更改日期,并写下“b”:“1090-06-14”->它不起作用
但是二战的结束是有效的:“b”:“1945-09-02”
还有法国大革命的开始:'b':'1789-05-05'

尝试一下,我发现限制是1678-01-01,所以如果你选择“b”:“1678-01-01”,它可以工作,但对于任何早于此的日期,它都不再工作

并不是说这在编程上很重要(我不认为在该日期之前的数据框中包含太多内容),而是为什么会发生这种情况

谢谢

这里是答案:
由于pandas以纳秒分辨率表示时间戳,因此可以使用64位整数表示的时间跨度被限制为大约584年:

In[92]:pd.Timestamp.min Out[92]:时间戳('1677-09-21 00:12:43.145225')

在[93]中:pd.Timestamp.max Out[93]:时间戳('2262-04-11 23:47:16.854775807')

参见: