由于pandas 0.23.4完全不推荐pandas._libs.tslib.NaTType,所以我必须使用pandas.NaT,如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发布于 2018-11-20 18:26:16
好吧,正如反对消息所建议的那样,您应该使用type(pandas.NaT),而不是直接使用NaT。因此,如果导入了名称,就可以执行issubclass(val_type, type(pandas.NaT))。
发布于 2018-11-20 18:33:46
对其他答案稍作阐述:
pandas._libs.tslibs.nattype.NaTType是一个定义为这里的类。
class NaTType(_NaT):
    """(N)ot-(A)-(T)ime, the time equivalent of NaN"""pandas.NaT (引入顶级命名空间)是上面定义的这里类的一个实例。
NaT = NaTType()其原因是
这是一个伪本地哨兵值,可以用单数dtype ( NumPy ) (datetime64ns)表示。
issubclass()要求您传递一个实际的类,而不是类实例,使用type(pd.NaT)将为您完成这个任务,而不会直接访问任何“非公共”API。
发布于 2018-11-20 18:29:24
您需要给isinstance()您要寻找的实际类型。在本例中,我将执行type(df.loc[knownnatdata),并将其用作方法的输入。例如,我用pd.NaT填充了一个dataframe列
df = pd.DataFrame([[1,1],[3,4],[3,4]], columns=["a", 'b'])
df['c'],df['d']=np.nan, pd.NaT
    a   b   c   d
0   1   1   NaN NaT
1   3   4   NaN NaT
2   3   4   NaN NaT然后type(df['d'].iloc[0])给了我pandas._libs.tslibs.nattype.NaTType (这仍然是我的版本中的类型,但请注意,它仍然不仅仅是NaT)
与之相比
isinstance(df['d'].iloc[0],pd._libs.tslibs.nattype.NaTType)
Truehttps://stackoverflow.com/questions/53399137
复制相似问题