Python isin不在datetimes的数据阵列上工作,除非有弃用警告
我有以下两个日期时间数组: 达特萨:Python isin不在datetimes的数据阵列上工作,除非有弃用警告,python,datetime,deprecation-warning,isin,Python,Datetime,Deprecation Warning,Isin,我有以下两个日期时间数组: 达特萨: datesA array([datetime.datetime(2000, 1, 4, 0, 0), datetime.datetime(2000, 1, 5, 0, 0), datetime.datetime(2000, 1, 6, 0, 0), datetime.datetime(2000, 1, 7, 0, 0), datetime.datetime(2000, 1, 8, 0,
datesA
array([datetime.datetime(2000, 1, 4, 0, 0),
datetime.datetime(2000, 1, 5, 0, 0),
datetime.datetime(2000, 1, 6, 0, 0),
datetime.datetime(2000, 1, 7, 0, 0),
datetime.datetime(2000, 1, 8, 0, 0),
datetime.datetime(2000, 1, 9, 0, 0),
datetime.datetime(2000, 1, 10, 0, 0),
datetime.datetime(2000, 1, 11, 0, 0),
datetime.datetime(2000, 1, 12, 0, 0)], dtype=object)
和日期b:
datesB
array([datetime.datetime(2000, 1, 4, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 5, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 6, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 7, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 10, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 11, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 12, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 13, 0, 0, tzinfo=<UTC>),
datetime.datetime(2000, 1, 14, 0, 0, tzinfo=<UTC>)], dtype=object)
datesA第4行和第5行(datetime.datetime(2000,1,8,0,0)和datetime.datetime(2000,1,9,0,0))是唯一不在datesB中且应返回True的记录
我发现在这些帖子中报告了isin()
不适用于datetimes的问题:
datesA_not_in_datesB = ~np.isin(datesA.astype('datetime64[ns]'),datesB.astype('datetime64[ns]'))
C:\Users\Username\anaconda3\lib\site-packages\ipykernel_launcher.py:1: DeprecationWarning: parsing timezone aware datetimes is deprecated; this will raise an error in the future
"""Entry point for launching an IPython kernel.
datesA_not_in_datesB.reshape(-1,1)
array([[False],
[False],
[False],
[False],
[ True],
[ True],
[False],
[False],
[False]])
除非我收到一条警告信息,否则这是有效的:
不推荐使用警告:不推荐解析时区感知的日期时间;
这将在将来启动的“入口点”中引发错误
IPython内核
我尝试了一些方法来删除datesB中的时区.replace(tzinfo=None)
info,使isnan工作而不必使用.astype('datetime64[ns]”)
,并找到一个没有弃用警告的解决方案,但没有效果
是否有人能就如何获得与之相同的结果提供建议
datesA_not_in_datesB = ~np.isin(datesA.astype('datetime64[ns]'),datesB.astype('datetime64[ns]'))
但在某种程度上不会导致弃用警告
非常感谢您的时间和帮助。我从datetime对象中删除了
tzinfo=
这个代码没有给我任何警告
如果我没抓住要点,我道歉
import numpy as np
import datetime
from pytz import UTC
datesA = np.array([datetime.datetime(2000, 1, 4, 0, 0),
datetime.datetime(2000, 1, 5, 0, 0),
datetime.datetime(2000, 1, 6, 0, 0),
datetime.datetime(2000, 1, 7, 0, 0),
datetime.datetime(2000, 1, 8, 0, 0),
datetime.datetime(2000, 1, 9, 0, 0),
datetime.datetime(2000, 1, 10, 0, 0),
datetime.datetime(2000, 1, 11, 0, 0),
datetime.datetime(2000, 1, 12, 0, 0)], dtype=object)
datesB = np.array([datetime.datetime(2000, 1, 4, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 5, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 6, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 7, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 10, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 11, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 12, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 13, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 14, 0, 0, tzinfo=UTC)], dtype=object)
datesB = np.array([d.replace(tzinfo=None) for d in datesB])
datesA_not_in_datesB = ~np.isin(datesA,datesB)
print(datesA_not_in_datesB)
>>> [False False False False True True False False False]
reshaped = datesA_not_in_datesB.reshape(-1,1)
print(reshaped)
>>> [[False]
[False]
[False]
[False]
[ True]
[ True]
[False]
[False]
[False]]
您试图使用
replace
将其更改为tzinfo=None
,或者您是否已将其完全删除为datetime.datetime(2000,1,4,0,0)
?抱歉,有点不清楚!:)请尝试例如datesB_mod=np.array([d.replace(tzinfo=None)用于datesB中的d])
和~np.isin(datesA.astype('datetime64[ns]),datesB_mod.astype('datetime64[ns]'))
会很好用的…谢谢你的耐心Jonash。我想删除它,我必须应用。替换(tzinfo=None)
。这是我在其他类似的帖子上发现的()。您能告诉我如何从datesB中删除时区信息吗?非常感谢您的时间和帮助。您收到的警告要点是“不要将naive与aware datetime对象进行比较。”"... 因此,您不应该同时处理这两个问题-要么将它们全部本地化,要么保持它们的幼稚,例如,如果您知道它们都在UTC。非常感谢@MrFuppes的帮助。一旦timzone信息被删除,正如Johnashu指出的那样,那么我就没有收到弃用警告。谢谢。
import numpy as np
import datetime
from pytz import UTC
datesA = np.array([datetime.datetime(2000, 1, 4, 0, 0),
datetime.datetime(2000, 1, 5, 0, 0),
datetime.datetime(2000, 1, 6, 0, 0),
datetime.datetime(2000, 1, 7, 0, 0),
datetime.datetime(2000, 1, 8, 0, 0),
datetime.datetime(2000, 1, 9, 0, 0),
datetime.datetime(2000, 1, 10, 0, 0),
datetime.datetime(2000, 1, 11, 0, 0),
datetime.datetime(2000, 1, 12, 0, 0)], dtype=object)
datesB = np.array([datetime.datetime(2000, 1, 4, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 5, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 6, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 7, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 10, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 11, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 12, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 13, 0, 0, tzinfo=UTC),
datetime.datetime(2000, 1, 14, 0, 0, tzinfo=UTC)], dtype=object)
datesB = np.array([d.replace(tzinfo=None) for d in datesB])
datesA_not_in_datesB = ~np.isin(datesA,datesB)
print(datesA_not_in_datesB)
>>> [False False False False True True False False False]
reshaped = datesA_not_in_datesB.reshape(-1,1)
print(reshaped)
>>> [[False]
[False]
[False]
[False]
[ True]
[ True]
[False]
[False]
[False]]