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_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)
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
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)
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)
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 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
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
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)
def test_union(self): result = self.container.union((1, 2, 3)) expected = FrozenList(self.lst + [1, 2, 3]) self.check_result(result, expected)
def setup_method(self, _): self.lst = [1, 2, 3, 4, 5] self.container = FrozenList(self.lst) self.klass = FrozenList
def container(lst): return FrozenList(lst)
def setUp(self): self.lst = [1, 2, 3, 4, 5] self.container = FrozenList(self.lst) self.klass = FrozenList
def unicode_container(): return FrozenList(["\u05d0", "\u05d1", "c"])
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)
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)