From 25bf13adc9917039023df07c1825faa55a6e59d2 Mon Sep 17 00:00:00 2001 From: ganevgv Date: Sat, 9 Nov 2019 00:29:08 +0000 Subject: [PATCH 1/3] add test for frame construction from dict with tuples --- pandas/tests/frame/test_constructors.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pandas/tests/frame/test_constructors.py b/pandas/tests/frame/test_constructors.py index aa00cf234d9ee..4ebc3ccb7154a 100644 --- a/pandas/tests/frame/test_constructors.py +++ b/pandas/tests/frame/test_constructors.py @@ -1424,6 +1424,20 @@ def test_from_dict_columns_parameter(self): dict([("A", [1, 2]), ("B", [4, 5])]), columns=["one", "two"] ) + @pytest.mark.parametrize( + "keys, values", + [([("a",), ("a",)], [1, 2]), ([("a",), ("b",)], [1, 2]), ([("a", "b")], [1])], + ) + def test_constructor_from_dict_tuples(self, keys, values): + data_dict = {key: value for key, value in zip(keys, values)} + df = DataFrame.from_dict([data_dict]) + + result = df.columns + keys = list(OrderedDict.fromkeys(keys)) + expected = Index(keys, dtype="object", tupleize_cols=False) + + tm.assert_index_equal(result, expected) + def test_constructor_Series_named(self): a = Series([1, 2, 3], index=["a", "b", "c"], name="x") df = DataFrame(a) From 86f6c74fb899e81ba03e5210f9d5ccc5c01b622e Mon Sep 17 00:00:00 2001 From: ganevgv Date: Sat, 9 Nov 2019 01:43:28 +0000 Subject: [PATCH 2/3] parametrize full data_dict --- pandas/tests/frame/test_constructors.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pandas/tests/frame/test_constructors.py b/pandas/tests/frame/test_constructors.py index 4ebc3ccb7154a..538648c853c71 100644 --- a/pandas/tests/frame/test_constructors.py +++ b/pandas/tests/frame/test_constructors.py @@ -1425,16 +1425,21 @@ def test_from_dict_columns_parameter(self): ) @pytest.mark.parametrize( - "keys, values", - [([("a",), ("a",)], [1, 2]), ([("a",), ("b",)], [1, 2]), ([("a", "b")], [1])], + "data_dict", + [ + [{("a",): 1}, {("a",): 2}], + [OrderedDict([(("a",), 1), (("b",), 2)])], + [{("a", "b"): 1}], + ], ) - def test_constructor_from_dict_tuples(self, keys, values): - data_dict = {key: value for key, value in zip(keys, values)} - df = DataFrame.from_dict([data_dict]) + def test_constructor_from_dict_tuples(self, data_dict): + # GH 16769 + df = DataFrame.from_dict(data_dict) result = df.columns - keys = list(OrderedDict.fromkeys(keys)) - expected = Index(keys, dtype="object", tupleize_cols=False) + all_columns = [key for sub_dict in data_dict for key in sub_dict.keys()] + columns = list(OrderedDict.fromkeys(all_columns)) + expected = Index(columns, dtype="object", tupleize_cols=False) tm.assert_index_equal(result, expected) From 957c964bb54a20bef138008067f6bf756e7befb2 Mon Sep 17 00:00:00 2001 From: ganevgv Date: Sat, 9 Nov 2019 19:35:01 +0000 Subject: [PATCH 3/3] refactor parametrize --- pandas/tests/frame/test_constructors.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/pandas/tests/frame/test_constructors.py b/pandas/tests/frame/test_constructors.py index 538648c853c71..1d030bbc75521 100644 --- a/pandas/tests/frame/test_constructors.py +++ b/pandas/tests/frame/test_constructors.py @@ -1425,21 +1425,19 @@ def test_from_dict_columns_parameter(self): ) @pytest.mark.parametrize( - "data_dict", + "data_dict, keys", [ - [{("a",): 1}, {("a",): 2}], - [OrderedDict([(("a",), 1), (("b",), 2)])], - [{("a", "b"): 1}], + ([{("a",): 1}, {("a",): 2}], [("a",)]), + ([OrderedDict([(("a",), 1), (("b",), 2)])], [("a",), ("b",)]), + ([{("a", "b"): 1}], [("a", "b")]), ], ) - def test_constructor_from_dict_tuples(self, data_dict): + def test_constructor_from_dict_tuples(self, data_dict, keys): # GH 16769 df = DataFrame.from_dict(data_dict) result = df.columns - all_columns = [key for sub_dict in data_dict for key in sub_dict.keys()] - columns = list(OrderedDict.fromkeys(all_columns)) - expected = Index(columns, dtype="object", tupleize_cols=False) + expected = Index(keys, dtype="object", tupleize_cols=False) tm.assert_index_equal(result, expected)