Example #1
0
    def test_add(self):
        result = self.container + (1, 2, 3)
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + self.container
        expected = FrozenList([1, 2, 3] + self.lst)
        self.check_result(result, expected)
Example #2
0
    def test_add(self, container, lst):
        result = container + (1, 2, 3)
        expected = FrozenList(lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + container
        expected = FrozenList([1, 2, 3] + lst)
        self.check_result(result, expected)
Example #3
0
def stack_columns(pd: DataFrame, target_columns: List[Any], keep_columns: List[Any],
                  label_name: Any = 'stack_label', output_name: Any = 'stacked',
                  label_dtype: Any = 'object', output_dtype: Any = 'object'):
    """
    API to create stack pandas dataframe from specific columns.

    Args:
        df (pandas.DataFrame): target pandas dataframe
        target_columns (List[Any]): name of columns to stack.
        keep_columns (List[Any]): result dataframe will contains original index, stacked column, and keep_columns
        label_name (Any): name of label column in stack result
        output_name (Any): name of output column in stack result
        label_dtype (Any): dtype of label column in stack result
        output_dtype (Any): dtype of output column in stack result
    Returns:
        result pandas dataframe
    Examples:
        >>> import pandas
        >>> pd = pandas.DataFrame({'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [5, 6, 7, 8],
        ...                        'label': ['a', 'b', 'c', 'd']},
        ...                        index=[100, 200, 300, 400])
        >>> print(pd)
        ... # doctest: +NORMALIZE_WHITESPACE
             a  b  c label
        100  1  2  5     a
        200  2  3  6     b
        300  3  4  7     c
        400  4  5  8     d
        >>> result = stack_columns(pd, ['a', 'b'], ['label'])
        >>> print(result)
        ... # doctest: +NORMALIZE_WHITESPACE
            label stack_label  stacked
        100     a           a        1
        100     a           b        2
        200     b           a        2
        200     b           b        3
        300     c           a        3
        300     c           b        4
        400     d           a        4
        400     d           b        5
        >>> print(result.dtypes)
        ... # doctest: +NORMALIZE_WHITESPACE
        label          object
        stack_label    object
        stacked        object
        dtype: object
    """
    indexed = pd.set_index(keep_columns, append=True)
    stacked = indexed[target_columns].stack()
    new_index_names = list(stacked.index.names)
    new_index_names[-1] = label_name
    renamed = stacked.rename_axis(index=FrozenList(new_index_names))
    renamed.name = output_name

    result_df = DataFrame(renamed).reset_index(level=keep_columns + [label_name])

    result_df[label_name] = result_df[label_name].astype(label_dtype)
    result_df[output_name] = result_df[output_name].astype(output_dtype)

    return result_df
Example #4
0
class TestFrozenList(CheckImmutable, CheckStringMixin):
    mutable_methods = ('extend', 'pop', 'remove', 'insert')
    unicode_container = FrozenList(["\u05d0", "\u05d1", "c"])

    def setup_method(self, _):
        self.lst = [1, 2, 3, 4, 5]
        self.container = FrozenList(self.lst)
        self.klass = FrozenList

    def test_add(self):
        result = self.container + (1, 2, 3)
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + self.container
        expected = FrozenList([1, 2, 3] + self.lst)
        self.check_result(result, expected)

    def test_iadd(self):
        q = r = self.container

        q += [5]
        self.check_result(q, self.lst + [5])

        # Other shouldn't be mutated.
        self.check_result(r, self.lst)

    def test_union(self):
        result = self.container.union((1, 2, 3))
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

    def test_difference(self):
        result = self.container.difference([2])
        expected = FrozenList([1, 3, 4, 5])
        self.check_result(result, expected)

    def test_difference_dupe(self):
        result = FrozenList([1, 2, 3, 2]).difference([2])
        expected = FrozenList([1, 3])
        self.check_result(result, expected)

    def test_tricky_container_to_bytes_raises(self):
        # GH 26447
        msg = "^'str' object cannot be interpreted as an integer$"
        with pytest.raises(TypeError, match=msg):
            bytes(self.unicode_container)
Example #5
0
def test_remove_unused_levels_with_nan():
    # GH 37510
    idx = Index([(1, np.nan), (3, 4)]).rename(["id1", "id2"])
    idx = idx.set_levels(["a", np.nan], level="id1")
    idx = idx.remove_unused_levels()
    result = idx.levels
    expected = FrozenList([["a", np.nan], [4]])
    assert str(result) == str(expected)
Example #6
0
class TestFrozenList(CheckImmutable, CheckStringMixin):
    mutable_methods = ('extend', 'pop', 'remove', 'insert')
    unicode_container = FrozenList(["\u05d0", "\u05d1", "c"])

    def setup_method(self, _):
        self.lst = [1, 2, 3, 4, 5]
        self.container = FrozenList(self.lst)
        self.klass = FrozenList

    def test_add(self):
        result = self.container + (1, 2, 3)
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + self.container
        expected = FrozenList([1, 2, 3] + self.lst)
        self.check_result(result, expected)

    def test_iadd(self):
        q = r = self.container

        q += [5]
        self.check_result(q, self.lst + [5])

        # Other shouldn't be mutated.
        self.check_result(r, self.lst)

    def test_union(self):
        result = self.container.union((1, 2, 3))
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

    def test_difference(self):
        result = self.container.difference([2])
        expected = FrozenList([1, 3, 4, 5])
        self.check_result(result, expected)

    def test_difference_dupe(self):
        result = FrozenList([1, 2, 3, 2]).difference([2])
        expected = FrozenList([1, 3])
        self.check_result(result, expected)
Example #7
0
        def findPrefixPath(basePat,
                           treeNode):  #treeNode comes from header table
            condPats = {}

            #----------
            while treeNode != None:
                prefixPath = []

                # 每一個項目都向上走訪節點,走訪過程中經過的節點形成路徑。
                ascendTree(treeNode, prefixPath)

                if (len(prefixPath) > 1):
                    # 路徑起始節點的支持度即為該路徑的支持度。
                    condPats[FrozenList(prefixPath[1:])] = treeNode.count

                # 換到下一個項目繼續走訪
                treeNode = treeNode.nodeLink
            #----------

            return condPats
Example #8
0
    def load(self, path):

        #--------------------
        samples = list()
        f = open(path, 'rU')
        for l in f:
            sample = list(map(str.strip, l.split(',')))

            # (排序只是為了確保順序一致,不排序也可以。)
            samples.append(sorted(sample))
        #--------------------

        #--------------------
        retDict = {}
        for trans in samples:
            retDict[FrozenList(trans)] = 1

        # (排序只是為了確保順序一致,不排序也可以。)
        retDict = OrderedDict(sorted(retDict.items(), key=itemgetter(0)))
        #--------------------

        return retDict
Example #9
0
class TestFrozenList(CheckImmutable, CheckStringMixin, tm.TestCase):
    mutable_methods = ('extend', 'pop', 'remove', 'insert')
    unicode_container = FrozenList([u("\u05d0"), u("\u05d1"), "c"])

    def setUp(self):
        self.lst = [1, 2, 3, 4, 5]
        self.container = FrozenList(self.lst)
        self.klass = FrozenList

    def test_add(self):
        result = self.container + (1, 2, 3)
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + self.container
        expected = FrozenList([1, 2, 3] + self.lst)
        self.check_result(result, expected)

    def test_inplace(self):
        q = r = self.container
        q += [5]
        self.check_result(q, self.lst + [5])
        # other shouldn't be mutated
        self.check_result(r, self.lst)
Example #10
0
 def test_union(self):
     result = self.container.union((1, 2, 3))
     expected = FrozenList(self.lst + [1, 2, 3])
     self.check_result(result, expected)
Example #11
0
 def setup_method(self, _):
     self.lst = [1, 2, 3, 4, 5]
     self.container = FrozenList(self.lst)
     self.klass = FrozenList
Example #12
0
def container(lst):
    return FrozenList(lst)
Example #13
0
 def setUp(self):
     self.lst = [1, 2, 3, 4, 5]
     self.container = FrozenList(self.lst)
     self.klass = FrozenList
Example #14
0
def unicode_container():
    return FrozenList(["\u05d0", "\u05d1", "c"])
Example #15
0
 def test_difference(self):
     result = self.container.difference([2])
     expected = FrozenList([1, 3, 4, 5])
     self.check_result(result, expected)
Example #16
0
 def test_difference_dupe(self):
     result = FrozenList([1, 2, 3, 2]).difference([2])
     expected = FrozenList([1, 3])
     self.check_result(result, expected)
Example #17
0
class TestFrozenList:

    unicode_container = FrozenList(["\u05d0", "\u05d1", "c"])

    def setup_method(self, _):
        self.lst = [1, 2, 3, 4, 5]
        self.container = FrozenList(self.lst)

    def check_mutable_error(self, *args, **kwargs):
        # Pass whatever function you normally would to pytest.raises
        # (after the Exception kind).
        mutable_regex = re.compile("does not support mutable operations")
        msg = "'(_s)?re.(SRE_)?Pattern' object is not callable"
        with pytest.raises(TypeError, match=msg):
            mutable_regex(*args, **kwargs)

    def test_no_mutable_funcs(self):
        def setitem():
            self.container[0] = 5

        self.check_mutable_error(setitem)

        def setslice():
            self.container[1:2] = 3

        self.check_mutable_error(setslice)

        def delitem():
            del self.container[0]

        self.check_mutable_error(delitem)

        def delslice():
            del self.container[0:3]

        self.check_mutable_error(delslice)

        mutable_methods = ("extend", "pop", "remove", "insert")

        for meth in mutable_methods:
            self.check_mutable_error(getattr(self.container, meth))

    def test_slicing_maintains_type(self):
        result = self.container[1:2]
        expected = self.lst[1:2]
        self.check_result(result, expected)

    def check_result(self, result, expected):
        assert isinstance(result, FrozenList)
        assert result == expected

    def test_string_methods_dont_fail(self):
        repr(self.container)
        str(self.container)
        bytes(self.container)

    def test_tricky_container(self):
        repr(self.unicode_container)
        str(self.unicode_container)

    def test_add(self):
        result = self.container + (1, 2, 3)
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

        result = (1, 2, 3) + self.container
        expected = FrozenList([1, 2, 3] + self.lst)
        self.check_result(result, expected)

    def test_iadd(self):
        q = r = self.container

        q += [5]
        self.check_result(q, self.lst + [5])

        # Other shouldn't be mutated.
        self.check_result(r, self.lst)

    def test_union(self):
        result = self.container.union((1, 2, 3))
        expected = FrozenList(self.lst + [1, 2, 3])
        self.check_result(result, expected)

    def test_difference(self):
        result = self.container.difference([2])
        expected = FrozenList([1, 3, 4, 5])
        self.check_result(result, expected)

    def test_difference_dupe(self):
        result = FrozenList([1, 2, 3, 2]).difference([2])
        expected = FrozenList([1, 3])
        self.check_result(result, expected)

    def test_tricky_container_to_bytes_raises(self):
        # GH 26447
        msg = "^'str' object cannot be interpreted as an integer$"
        with pytest.raises(TypeError, match=msg):
            bytes(self.unicode_container)