def take(self, axis, n):
        """Take the first (or last) n rows or columns from the blocks

        Note: Axis = 0 will be equivalent to `head` or `tail`
              Axis = 1 will be equivalent to `front` or `back`

        Args:
            axis: The axis to extract (0 for extracting rows, 1 for extracting columns)
            n: The number of rows or columns to extract, negative denotes to extract
                from the bottom of the object

        Returns:
            A new BaseFrameManager object, the type of object that called this.
        """
        # These are the partitions that we will extract over
        if not axis:
            partitions = self.partitions
            bin_lengths = self.block_lengths
        else:
            partitions = self.partitions.T
            bin_lengths = self.block_widths
        if n < 0:
            length_bins = np.cumsum(bin_lengths[::-1])
            n *= -1
            idx = int(np.digitize(n, length_bins))
            if idx > 0:
                remaining = int(n - length_bins[idx - 1])
            else:
                remaining = n
            # In this case, we require no remote compute. This is much faster.
            if remaining == 0:
                result = partitions[-idx:]
            else:
                # Reverse for ease of iteration and then re-reverse at the end
                partitions = partitions[::-1]
                # We build this iloc to avoid creating a bunch of helper methods.
                # This code creates slice objects to be passed to `iloc` to grab
                # the last n rows or columns depending on axis.
                slice_obj = (
                    slice(-remaining, None)
                    if axis == 0
                    else (slice(None), slice(-remaining, None))
                )
                func = self.preprocess_func(lambda df: df.iloc[slice_obj])
                # We use idx + 1 here because the loop is not inclusive, and we
                # need to iterate through idx.
                result = np.array(
                    [
                        partitions[i]
                        if i != idx
                        else [obj.apply(func) for obj in partitions[i]]
                        for i in range(idx + 1)
                    ]
                )[::-1]
        else:
            length_bins = np.cumsum(bin_lengths)
            idx = int(np.digitize(n, length_bins))
            if idx > 0:
                remaining = int(n - length_bins[idx - 1])
            else:
                remaining = n
            # In this case, we require no remote compute. This is much faster.
            if remaining == 0:
                result = partitions[:idx]
            else:
                # We build this iloc to avoid creating a bunch of helper methods.
                # This code creates slice objects to be passed to `iloc` to grab
                # the first n rows or columns depending on axis.
                slice_obj = (
                    slice(remaining) if axis == 0 else (slice(None), slice(remaining))
                )
                func = self.preprocess_func(lambda df: df.iloc[slice_obj])
                # See note above about idx + 1
                result = np.array(
                    [
                        partitions[i]
                        if i != idx
                        else [obj.apply(func) for obj in partitions[i]]
                        for i in range(idx + 1)
                    ]
                )
        return self.__constructor__(result.T) if axis else self.__constructor__(result)
def take ( self , axis , n ) : if not axis : partitions = self . partitions bin_lengths = self . block_lengths else : partitions = self . partitions . T bin_lengths = self . block_widths if n < 0 : length_bins = np . cumsum ( bin_lengths [ : : - 1 ] ) n *= - 1 idx = int ( np . digitize ( n , length_bins ) ) if idx > 0 : remaining = int ( n - length_bins [ idx - 1 ] ) else : remaining = n if remaining == 0 : result = partitions [ - idx : ] else : partitions = partitions [ : : - 1 ] slice_obj = ( slice ( - remaining , None ) if axis == 0 else ( slice ( None ) , slice ( - remaining , None ) ) ) func = self . preprocess_func ( lambda df : df . iloc [ slice_obj ] ) result = np . array ( [ partitions [ i ] if i != idx else [ obj . apply ( func ) for obj in partitions [ i ] ] for i in range ( idx + 1 ) ] ) [ : : - 1 ] else : length_bins = np . cumsum ( bin_lengths ) idx = int ( np . digitize ( n , length_bins ) ) if idx > 0 : remaining = int ( n - length_bins [ idx - 1 ] ) else : remaining = n if remaining == 0 : result = partitions [ : idx ] else : slice_obj = ( slice ( remaining ) if axis == 0 else ( slice ( None ) , slice ( remaining ) ) ) func = self . preprocess_func ( lambda df : df . iloc [ slice_obj ] ) result = np . array ( [ partitions [ i ] if i != idx else [ obj . apply ( func ) for obj in partitions [ i ] ] for i in range ( idx + 1 ) ] ) return self . __constructor__ ( result . T ) if axis else self . __constructor__ ( result )
Take the first (or last) n rows or columns from the blocks

        Note: Axis = 0 will be equivalent to `head` or `tail`
              Axis = 1 will be equivalent to `front` or `back`

        Args:
            axis: The axis to extract (0 for extracting rows, 1 for extracting columns)
            n: The number of rows or columns to extract, negative denotes to extract
                from the bottom of the object

        Returns:
            A new BaseFrameManager object, the type of object that called this.