pandas.isna() 与 pandas.DataFrame.isna()

数据挖掘 熊猫 类似文件
2022-03-06 17:19:49

我已经看过pandas.isna()pandas.DataFrame.isna()的两个文档页面,但我仍然不清楚区别。有人可以使用示例向我解释其中的区别吗?

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()