我已经看过pandas.isna()和pandas.DataFrame.isna()的两个文档页面,但我仍然不清楚区别。有人可以使用示例向我解释其中的区别吗?
pandas.isna() 与 pandas.DataFrame.isna()
数据挖掘
熊猫
类似文件
2022-03-06 17:19:49
1个回答
它们调用相同的底层方法,因此没有功能差异。
对于 OOP 模式,首选调用数据框成员函数,但通常在 pandas 和 python 中存在许多冗余/别名。
如果你好奇,这里是源代码是如何分解的(它是一团糟)。
DataFrame( pandas/core/frame.py) 方法很简单:
def isna(self):
return super().isna()
DataFrame 扩展 NDFrame 的地方(在 中实现pandas/core/generic.py)。NDFrame 随后调用:
def isna(self):
return isna(self).__finalize__(self)
这是在这里导入的:
from pandas.core.dtypes.missing import isna, notna
在pandas/core/dtypes/missing.py:
def isna(obj):
return _isna(obj)
该_isna函数后来被别名为,_isna = _isna_new因为有一个不推荐使用的方法_isna_old(obj)。
然后该_isna_new(obj)函数执行逻辑操作:
def _isna_new(obj)
if is_scalar(obj):
return libmissing.checknull(obj)
# hack (for now) because MI registers as ndarray
elif isinstance(obj, ABCMultiIndex):
raise NotImplementedError("isna is not defined for MultiIndex")
elif isinstance(obj, type):
return False
elif isinstance(
obj,
(
ABCSeries,
np.ndarray,
ABCIndexClass,
ABCExtensionArray,
ABCDatetimeArray,
ABCTimedeltaArray,
),
):
return _isna_ndarraylike(obj)
elif isinstance(obj, ABCGeneric):
return obj._constructor(obj._data.isna(func=isna))
elif isinstance(obj, list):
return _isna_ndarraylike(np.asarray(obj, dtype=object))
elif hasattr(obj, "__array__"):
return _isna_ndarraylike(np.asarray(obj))
else:
return obj is None
最终,DataFrame 方法将自身作为参数传递给您调用的同一函数pandas.isna()。