From ebb3f8c6667aa6bd798dee03031b9d22a87734ba Mon Sep 17 00:00:00 2001 From: Alexander Ponomaroff Date: Thu, 28 Mar 2019 20:56:03 -0400 Subject: [PATCH 1/2] Fixed pep8 issues --- doc/source/whatsnew/v0.25.0.rst | 2 +- pandas/core/internals/construction.py | 2 +- pandas/tests/frame/test_constructors.py | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/doc/source/whatsnew/v0.25.0.rst b/doc/source/whatsnew/v0.25.0.rst index 99b57e2427509..c9ee817cd7c22 100644 --- a/doc/source/whatsnew/v0.25.0.rst +++ b/doc/source/whatsnew/v0.25.0.rst @@ -395,7 +395,7 @@ Sparse Other ^^^^^ -- +- Ensured that ``DataFrame`` constructed from a ``dict`` with no index passed will follow the ``dict``'s insertion order (:issue:`25911`) - - diff --git a/pandas/core/internals/construction.py b/pandas/core/internals/construction.py index 231cca0c6701b..f60f17f6d80b5 100644 --- a/pandas/core/internals/construction.py +++ b/pandas/core/internals/construction.py @@ -302,7 +302,7 @@ def extract_index(data): ' an index') if have_series or have_dicts: - index = _union_indexes(indexes) + index = _union_indexes(indexes, sort=False) if have_raw_arrays: lengths = list(set(raw_lengths)) diff --git a/pandas/tests/frame/test_constructors.py b/pandas/tests/frame/test_constructors.py index 8ea5c05125005..6171fb3c8fff6 100644 --- a/pandas/tests/frame/test_constructors.py +++ b/pandas/tests/frame/test_constructors.py @@ -314,6 +314,17 @@ def test_constructor_dict(self): with pytest.raises(ValueError, match=msg): DataFrame({'a': 0.7}, columns=['a']) + def test_constructor_dict_order(self): + data = {'B': {'b': 1, 'c': 2, 'a': 3}, + 'A': {'b': 3, 'c': 2, 'a': 1}} + result = pd.DataFrame(data) + + expected = pd.DataFrame([[1, 3], [2, 2], [3, 1]], + index=['b', 'c', 'a'], + columns=['B', 'A']) + + tm.assert_frame_equal(result, expected) + @pytest.mark.parametrize("scalar", [2, np.nan, None, 'D']) def test_constructor_invalid_items_unused(self, scalar): # No error if invalid (scalar) value is in fact not used: @@ -479,7 +490,7 @@ def test_constructor_subclass_dict(self): dct.update(v.to_dict()) data[k] = dct frame = DataFrame(data) - tm.assert_frame_equal(self.frame.sort_index(), frame) + tm.assert_frame_equal(self.frame, frame) def test_constructor_dict_block(self): expected = np.array([[4., 3., 2., 1.]]) @@ -1110,7 +1121,7 @@ def test_constructor_list_of_series(self): sdict = OrderedDict(zip(['x', 'Unnamed 0'], data)) expected = DataFrame.from_dict(sdict, orient='index') - tm.assert_frame_equal(result.sort_index(), expected) + tm.assert_frame_equal(result, expected) # none named data = [OrderedDict([['a', 1.5], ['b', 3], ['c', 4], ['d', 6]]), @@ -1231,7 +1242,7 @@ def test_constructor_namedtuples(self): def test_constructor_orient(self): data_dict = self.mixed_frame.T._series recons = DataFrame.from_dict(data_dict, orient='index') - expected = self.mixed_frame.sort_index() + expected = self.mixed_frame tm.assert_frame_equal(recons, expected) # dict of sequence From d2ec8ac97b0882fbbdc184faa33d5e34fdfa0331 Mon Sep 17 00:00:00 2001 From: Alexander Ponomaroff Date: Thu, 28 Mar 2019 20:59:28 -0400 Subject: [PATCH 2/2] Fix indentation mistake --- pandas/core/internals/construction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/internals/construction.py b/pandas/core/internals/construction.py index f60f17f6d80b5..019e1c676c60f 100644 --- a/pandas/core/internals/construction.py +++ b/pandas/core/internals/construction.py @@ -302,7 +302,7 @@ def extract_index(data): ' an index') if have_series or have_dicts: - index = _union_indexes(indexes, sort=False) + index = _union_indexes(indexes, sort=False) if have_raw_arrays: lengths = list(set(raw_lengths))