Python 熊猫出界时间戳工作

Python 熊猫出界时间戳工作,python,pandas,Python,Pandas,我正在尝试将一个表从一个sql server写入另一个sql server。有些日期值在未来很遥远(9000+年)。熊猫抛出错误: 越界时间:越界纳秒时间戳:9017-11-10 00:00:00 尝试写入或执行列上的pd.to_datetime()函数时。我宁愿在写之前不将列转换为字符串,并且希望有某种方法来处理如此遥远的日期 从我所做的谷歌搜索来看,熊猫似乎确实是有意这样做的。我不得不相信还有一个替代方案,因为没有遥远日期的限制(特别是当数据库可以很好地处理它时)似乎非常重要。上述函数通过将

我正在尝试将一个表从一个sql server写入另一个sql server。有些日期值在未来很遥远(9000+年)。熊猫抛出错误:

越界时间:越界纳秒时间戳:9017-11-10 00:00:00

尝试写入或执行列上的pd.to_datetime()函数时。我宁愿在写之前不将列转换为字符串,并且希望有某种方法来处理如此遥远的日期


从我所做的谷歌搜索来看,熊猫似乎确实是有意这样做的。我不得不相信还有一个替代方案,因为没有遥远日期的限制(特别是当数据库可以很好地处理它时)似乎非常重要。

上述函数通过将其设置为支持的最大日期来处理越界

def date_include(dataframe):
    dataframe1=dataframe.str.split(" ", n = 1, expand = True)[0]
    dataframe2=dataframe.str.split(" ", n = 1, expand = True)[1]
    dataframe1=pd.to_numeric(dataframe1.str.replace('-',''),errors='coerce')
    dataframe1.loc[dataframe1>22620411]=22620411
    dataframe1=pd.to_datetime(dataframe1,format="%Y%m%d")
    date=dataframe1.astype(str)+" "+dataframe2
    return date

上述函数通过将其设置为支持的最大日期来处理越界

def date_include(dataframe):
    dataframe1=dataframe.str.split(" ", n = 1, expand = True)[0]
    dataframe2=dataframe.str.split(" ", n = 1, expand = True)[1]
    dataframe1=pd.to_numeric(dataframe1.str.replace('-',''),errors='coerce')
    dataframe1.loc[dataframe1>22620411]=22620411
    dataframe1=pd.to_datetime(dataframe1,format="%Y%m%d")
    date=dataframe1.astype(str)+" "+dataframe2
    return date

事实上,pandas在其所有datetime中都使用np datetime 64表示。我知道他们正在努力为SAS()解决这个问题,但显然不是在SQL上。可能是一个解决方法:您可以使用普通的SQLAlchemy,pandas也在引擎盖下使用它。它将日期转换为datetime.date(),可以处理您的用例。非常感谢@braml1。我能够将日期转换为标准的日期时间值:df['Date']=df['Date'].apply(如果pd.isnull(x)或者dt.Date(x.year,x.month,x.day),则lambda x:None)。这确实迫使我的datetimes的所有时间组件都是00:00:00.000,但幸运的是它们都已经为零,因为datetimes实际上只是日期。事实上,pandas的所有datetimes都使用np DateTime64表示法。我知道他们正在努力为SAS()解决这个问题,但显然不是在SQL上。可能是一个解决方法:您可以使用普通的SQLAlchemy,pandas也在引擎盖下使用它。它将日期转换为datetime.date(),可以处理您的用例。非常感谢@braml1。我能够将日期转换为标准的日期时间值:df['Date']=df['Date'].apply(如果pd.isnull(x)或者dt.Date(x.year,x.month,x.day),则lambda x:None)。这确实迫使我的datetimes的所有时间组件都是00:00:00.000,但幸运的是,它们已经全部为零,因为datetimes实际上只是日期。