0

我正在研究 pandas 库的源代码,因为我想了解更多关于实现的信息。看了系列课让我思考了一下。如果我隐藏了很多细节,则该类的定义如下:

class Series(np.ndarray, generic.PandasObject):
    def __new__(cls, data=None, index=None, dtype=None, name=None, copy=False):
        # some checkings
        subarray = _sanitize_array(data, index, dtype, copy, raise_cast_failure=True)
        return subarray
    def __init__(self, data=None, index=None, dtype=None, name=None, copy=False):
        pass
    # other class methods
def _sanitize_array(data, index, dtype=None, copy=False, raise_cast_failure=False):
    # some more instance checks
    subarr = np.array(arr, dtype=object, copy=copy)
    return subarray

这让我很困惑,因为既没有使用 cls 参数,也没有调用超类。我看不出这段代码是如何工作的。据我了解,Series 类应该只是一个伪装的 ndarray,因为它被返回了。显然我错过了一些东西。

4

1 回答 1

3

在 0.12 中,Series是 的子类ndarray,有很多被覆盖的方法。你错过了:

subarr = subarr.view(Series) which makes a ``Series`` a sub-class

无论如何,代码发生了很大变化,所以在 0.13 中,Series现在就像其他 pandas 对象和 的子类NDFrame,而不是 的子类ndarray

这里

于 2013-09-22T17:01:32.527 回答