从 pandas._libs.tslib.NaTType 更改时,pandas 问题与 pandas.NaT

新手上路,请多包涵

Since pandas 0.23.4 , pandas._libs.tslib.NaTType is completely deprecated, so I have to use pandas.NaT as indicated in 0.23.2 changelog,

 The type import pandas.tslib.NaTType is deprecated and can be replaced by using type(pandas.NaT)

但是当我尝试下面的代码时,

 from pandas import NaT
val_type = type(val)

if issubclass(val_type, NaT):
   return 'NaT'

我得到一个错误,

 TypeError: issubclass() arg 2 must be a class or tuple of classes

如果我尝试,

 if isinstance(val_type, NaT):
   return 'NaT'

我收到以下错误,

 TypeError: isinstance() arg 2 must be a type or tuple of types

原文由 daiyue 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

好吧,正如弃用消息所建议的那样,您应该直接使用 type(pandas.NaT) ,而不是 NaT 。因此,如果您导入了名称,则可以执行 issubclass(val_type, type(pandas.NaT))

原文由 zsomko 发布,翻译遵循 CC BY-SA 4.0 许可协议

稍微解释一下其他答案:

pandas._libs.tslibs.nattype.NaTType 是一个类,定义 在这里

 class NaTType(_NaT):
    """(N)ot-(A)-(T)ime, the time equivalent of NaN"""

pandas.NaT (进入顶级命名空间)是上面类的一个实例,定义 在这里

 NaT = NaTType()

原因是

这是一个伪原生标记值,可以由 NumPy 以单一 dtype (datetime64[ns]) 表示。

issubclass() 要求您传递一个实际的类,而不是类实例,并且使用 type(pd.NaT) 将为您执行此操作,而无需直接访问任何“非公共”API。

原文由 Brad Solomon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题