示例#1
0
文件: ops.py 项目: tnir/pandas
    def _reconstruct_ea_result(
        self, values: ExtensionArray, res_values: np.ndarray
    ) -> ExtensionArray:
        """
        Construct an ExtensionArray result from an ndarray result.
        """
        dtype: BaseMaskedDtype | StringDtype

        if isinstance(values.dtype, StringDtype):
            dtype = values.dtype
            string_array_cls = dtype.construct_array_type()
            return string_array_cls._from_sequence(res_values, dtype=dtype)

        elif isinstance(values.dtype, BaseMaskedDtype):
            new_dtype = self._get_result_dtype(values.dtype.numpy_dtype)
            dtype = BaseMaskedDtype.from_numpy_dtype(new_dtype)
            masked_array_cls = dtype.construct_array_type()
            return masked_array_cls._from_sequence(res_values, dtype=dtype)

        elif isinstance(values, (DatetimeArray, TimedeltaArray, PeriodArray)):
            # In to_cython_values we took a view as M8[ns]
            assert res_values.dtype == "M8[ns]"
            res_values = res_values.view(values._ndarray.dtype)
            return values._from_backing_data(res_values)

        raise NotImplementedError
示例#2
0
    def _reconstruct_ea_result(
        self, values: ExtensionArray, res_values: np.ndarray
    ) -> ExtensionArray:
        """
        Construct an ExtensionArray result from an ndarray result.
        """
        dtype: BaseMaskedDtype | StringDtype

        if isinstance(values.dtype, StringDtype):
            dtype = values.dtype
            cls = dtype.construct_array_type()
            return cls._from_sequence(res_values, dtype=dtype)

        elif isinstance(values.dtype, BaseMaskedDtype):
            new_dtype = self._get_result_dtype(values.dtype.numpy_dtype)
            dtype = BaseMaskedDtype.from_numpy_dtype(new_dtype)
            # error: Incompatible types in assignment (expression has type
            # "Type[BaseMaskedArray]", variable has type "Type[BaseStringArray]")
            cls = dtype.construct_array_type()  # type: ignore[assignment]
            return cls._from_sequence(res_values, dtype=dtype)

        elif isinstance(values, (DatetimeArray, TimedeltaArray, PeriodArray)):
            # In to_cython_values we took a view as M8[ns]
            assert res_values.dtype == "M8[ns]"
            res_values = res_values.view(values._ndarray.dtype)
            return values._from_backing_data(res_values)

        raise NotImplementedError