Python 从pandas更改为pandas.NaT时,pandas会出现问题。_libs.tslib.NaTType
由于Python 从pandas更改为pandas.NaT时,pandas会出现问题。_libs.tslib.NaTType,python,python-3.x,pandas,Python,Python 3.x,Pandas,由于pandas 0.23.4,pandas.\u libs.tslib.NaTType已被完全弃用,因此我必须使用pandas.NaT,如0.23.2changelog所示 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 issub
pandas 0.23.4
,pandas.\u 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
正如弃用消息所建议的,您应该使用
type(pandas.NaT)
,而不是直接使用NaT
。因此,如果您导入了名称,您可以执行issubclass(val_type,type(pandas.NaT))正如弃用消息所建议的,您应该使用类型(pandas.NaT)
,而不是直接使用NaT
。因此,如果您导入了名称,您可以执行IsubClass(val_type,type(pandas.NaT))您需要为isinstance()指定实际要查找的类型。在本例中,我将执行类型(df.loc[knownnatdata)
并将其用作方法的输入。例如,我用pd.NaT
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.\u libs.tslibs.nattype.nattype
(这仍然是我版本中的类型,但请注意,它仍然不仅仅是NaT
)
与之相比
isinstance(df['d'].iloc[0],pd._libs.tslibs.nattype.NaTType)
True
您需要给
isinstance()
您正在查找的实际类型。在这种情况下,我将执行type(df.loc[knownnatdata)
并将其用作方法的输入。例如,我用pd.NaT
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.\u libs.tslibs.nattype.nattype
(这仍然是我版本中的类型,但请注意,它仍然不仅仅是NaT
)
与之相比
isinstance(df['d'].iloc[0],pd._libs.tslibs.nattype.NaTType)
True
要详细说明其他答案:
pandas.\u libs.tslibs.nattype.nattype
是一个已定义的类
pandas.NaT
(引入顶级命名空间)是上述类的一个实例,定义如下:
理由是
这是一个伪本机sentinel值,可由NumPy以单数数据类型(datetime64[ns])表示
issubclass()
要求您传递一个实际的类,而不是类实例,使用type(pd.NaT)
可以在不直接访问任何“非公开”API的情况下为您传递该类。详细说明其他答案:
pandas.\u libs.tslibs.nattype.nattype
是一个已定义的类
pandas.NaT
(引入顶级命名空间)是上述类的一个实例,定义如下:
理由是
这是一个伪本机sentinel值,可由NumPy以单数数据类型(datetime64[ns])表示
issubclass()
要求您传递一个实际的类,而不是类实例,使用type(pd.NaT)
将为您传递该类,而无需直接访问任何“非公共”API。这比mine@BradSolomon-请检查。您可以看到如何使用它,因此您必须输入类型,而不是它们的实例。这比mine@BradSolomon-请检查。您可以看到如何使用它,因此您必须输入类型,而不是它们的实例。