【发布时间】:2020-01-12 09:39:09
【问题描述】:
我有一个数据框 df:
>>> df = pd.DataFrame({'values':[1.23, 3.12, 23.12]}, dtype=float)
运行检查:
>>> df.values.dtype
dtype('float64')
现在使用 isinstance 方法:
>>> isinstance(df.values.dtype, float)
False
现在使用 issubdtype 方法:
>>> np.issubdtype(df.values.dtype, float)
True
通过阅读文档。
语法 isinstance (object, classinfo)
object:一个对象实例。
我正在传递一个 ndarray 对象(我可以将其视为对象实例吗?)
classinfo:类、类型或包含类、类型或其他元组的元组。
我正在传递一个类型的浮点数,这很好。
问题是:为什么上面例子中的 isinstance 没有返回 true? isinstance 和 issubdtype 有什么区别?
【问题讨论】:
-
issubdtype适用于两种类型(并检查一种类型是否是另一种类型的子类型),而isinstance适用于 object 和一种类型,并检查如果对象是该类型的实例。 -
为什么我给出的示例返回 false?
-
因为
dtype('float')不是浮动对象(浮动对象将是0.0、3.14、np.nan等)。它是一种类型。 -
@WillemVanOnsem:它甚至不是一种类型。 NumPy 的 dtype 系统是一个独立于普通 Python 类型系统的系统。
dtype('float')是 dtype,而不是类型。 -
“我正在传递一个 ndarray 对象”——不,你不是。那将是
df.values,而不是df.values.dtype。