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
我需要几天的差异(df[LastLogin] - df['LastPurchased']).dt.days
但有一些'0001-01-01 00:00:00'
in LastPurchased
。我尝试做的任何事情来改变1-01-01
到 Panda 范围内的日期结果Out of bounds nanosecond timestamp: 1-01-01 00:00:00
。还有其他办法吗?
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
Pandas 要求日期时间中的年份大于 1677 且小于 2622(大约 - 请参阅pandas/_libs/tslibs/src/datetime/np_datetime.c https://github.com/pandas-dev/pandas/blob/master/pandas/_libs/tslibs/src/datetime/np_datetime.c以获得精确的边界)。否则,给定日期超出纳秒分辨率 64 位整数可以表示的范围:
>>> 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)
这取决于你想如何处理这件事。考虑一下你最终想要做什么indicate减去日期 0001-01-01。我假设这意味着用户已登录但从未购买过。
胁迫LastPurchased
有效的 Pandas 时间戳或pd.NaT
(“不是一次”),你可以使用
df['LastPurchased'] = pd.to_datetime(df['LastPurchased'], errors='coerce')
这将给NaT
作为这些点的差异:
>>> pd.Timestamp(2018, 1, 1) - pd.NaT
NaT
您可以将其用作“哨兵”并检查pd.isnat()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)