Python 如何绕过超限纳秒

Python 如何绕过超限纳秒,python,pandas,Python,Pandas,我需要不同的天数(df[LastLogin]-df['lastpowered']).dt.days但是lastpowered中有一些'0001-01-01 00:00:00'。如果我试图将1-01-01更改为熊猫边界内的某个日期,则会导致超出边界纳秒时间戳:1-01-01 00:00。还有别的办法吗 LastLogin LastPurchased 2018-08-21 00:28:04.081677 0

我需要不同的天数
(df[LastLogin]-df['lastpowered']).dt.days
但是
lastpowered
中有一些
'0001-01-01 00:00:00'
。如果我试图将
1-01-01
更改为熊猫边界内的某个日期,则会导致
超出边界纳秒时间戳:1-01-01 00:00
。还有别的办法吗

 LastLogin                         LastPurchased              
2018-08-21 00:28:04.081677         0001-01-01 00:00:00
2018-08-21 00:28:58.209522         2018-08-20 00:28:58.209522    

Pandas要求datetime中的年份大于1677,小于2622(大约-请参阅以了解确切界限)。否则,给定日期超出可由纳秒分辨率64位整数表示的范围:

     LastLogin                         LastPurchased              Days
2018-08-21 00:28:04.081677         1999-01-01 00:00:00            6935
2018-08-21 00:28:58.209522         2018-08-20 00:28:58.209522      1
这取决于你想如何处理这件事。考虑你最终试图通过减去日期001至01-01来指示。我假设这意味着用户已登录,但从未购买过

要强制
lastpowered
为有效的时间戳或
pd.NaT
(“非时间”),可以使用

>>> pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')
>>> pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')
>>> pd.Timestamp.max - pd.Timestamp.min
datetime.timedelta(213503, 84873, 709550)
这将给出
NaT
作为这些点的差异:

df['LastPurchased'] = pd.to_datetime(df['LastPurchased'], errors='coerce')

您可以将其用作“哨兵”,并使用
pd.isnat()

检查。您是否尝试过在调用
to_datetime
时设置
errors='concurve'
?这将替换为'pd.NaT',它是NaN的日期时间等价物。您也可以将其设置为“忽略”,但这可能会导致其他问题我已经尝试过了,但它不起作用(出于某种原因)
>>> pd.Timestamp(2018, 1, 1) - pd.NaT
NaT