From 36528d564b0bfe950c668de41f8d0432cc4668c1 Mon Sep 17 00:00:00 2001 From: jcontesti <25779507+jcontesti@users.noreply.github.com> Date: Fri, 30 Mar 2018 16:12:37 +0200 Subject: [PATCH 1/5] TST: test added to GH9336 --- pandas/tests/indexing/test_loc.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 2e52154d7679b..c1f318861ff2a 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -444,6 +444,13 @@ def test_loc_setitem_consistency(self): expected = DataFrame({'date': Series(['string'])}) tm.assert_frame_equal(df, expected) + # GH 9336 + expected = DataFrame({'date': [1, 'a', 'b']}) + df = DataFrame({'date': Series(pd.NaT, range(3))}) + df.loc[0, 'date'] = 1 + df.loc[1:2, 'date'] = 'a', 'b' + tm.assert_frame_equal(df, expected) + def test_loc_setitem_consistency_empty(self): # empty (essentially noops) expected = DataFrame(columns=['x', 'y']) From c28394ae356237eeae3208d9f0d9df44905eeafe Mon Sep 17 00:00:00 2001 From: jcontesti <25779507+jcontesti@users.noreply.github.com> Date: Sun, 6 May 2018 22:40:31 +0200 Subject: [PATCH 2/5] TST: code moved to test_indexing --- pandas/tests/frame/test_indexing.py | 8 ++++++++ pandas/tests/indexing/test_loc.py | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 6d74ce54faa94..30f3e1bd08ba5 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1548,6 +1548,14 @@ def test_setitem_single_column_mixed_datetime(self): # pytest.raises( # Exception, df.loc.__setitem__, ('d', 'timestamp'), [nan]) + def test_setitem_mixed_datetime(self): + # GH 9336 + expected = DataFrame({'date': [1, 'a', 'b']}) + df = DataFrame({'date': Series(pd.NaT, range(3))}) + df.loc[0, 'date'] = 1 + df.loc[1:2, 'date'] = 'a', 'b' + tm.assert_frame_equal(df, expected) + def test_setitem_frame(self): piece = self.frame.loc[self.frame.index[:2], ['A', 'B']] self.frame.loc[self.frame.index[-2]:, ['A', 'B']] = piece.values diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index c1f318861ff2a..2e52154d7679b 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -444,13 +444,6 @@ def test_loc_setitem_consistency(self): expected = DataFrame({'date': Series(['string'])}) tm.assert_frame_equal(df, expected) - # GH 9336 - expected = DataFrame({'date': [1, 'a', 'b']}) - df = DataFrame({'date': Series(pd.NaT, range(3))}) - df.loc[0, 'date'] = 1 - df.loc[1:2, 'date'] = 'a', 'b' - tm.assert_frame_equal(df, expected) - def test_loc_setitem_consistency_empty(self): # empty (essentially noops) expected = DataFrame(columns=['x', 'y']) From c1dfe56f7c3abace98996bc6b97bbe2f4ed66122 Mon Sep 17 00:00:00 2001 From: jcontesti <25779507+jcontesti@users.noreply.github.com> Date: Sun, 20 May 2018 18:58:12 +0200 Subject: [PATCH 3/5] TST: rest of the examples in #9336 added to new testing method --- pandas/tests/frame/test_indexing.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 30f3e1bd08ba5..91b4b35f70b21 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1550,11 +1550,22 @@ def test_setitem_single_column_mixed_datetime(self): def test_setitem_mixed_datetime(self): # GH 9336 - expected = DataFrame({'date': [1, 'a', 'b']}) - df = DataFrame({'date': Series(pd.NaT, range(3))}) - df.loc[0, 'date'] = 1 - df.loc[1:2, 'date'] = 'a', 'b' - tm.assert_frame_equal(df, expected) + expected = DataFrame({'a': [0, 0, 0, 0, 13, 14], + 'b': [pd.datetime(2012, 1, 1), + 1, + 'x', + 'y', + pd.datetime(2013, 1, 1), + pd.datetime(2014, 1, 1)]}) + df = pd.DataFrame(np.zeros((6, 2), dtype=int), columns=['a', 'b']) + df['b'] = pd.NaT + df.loc[0, 'b'] = pd.datetime(2012, 1, 1) + df.loc[1, 'b'] = 1 + df.loc[[2, 3], 'b'] = 'x', 'y' + A = pd.DataFrame([[13, pd.datetime(2013, 1, 1)], + [14, pd.datetime(2014, 1, 1)]]) + df.loc[[4, 5], ['a', 'b']] = A.values + assert_frame_equal(df, expected) def test_setitem_frame(self): piece = self.frame.loc[self.frame.index[:2], ['A', 'B']] From 63350d32afae040252c76f2a2cb259cad3bf58ec Mon Sep 17 00:00:00 2001 From: jcontesti <25779507+jcontesti@users.noreply.github.com> Date: Sat, 26 May 2018 18:46:10 +0200 Subject: [PATCH 4/5] TST: df declaration improved, numpy array assignation is now done with a numpy array directly --- pandas/tests/frame/test_indexing.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 91b4b35f70b21..5c032e089ebe4 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1557,14 +1557,14 @@ def test_setitem_mixed_datetime(self): 'y', pd.datetime(2013, 1, 1), pd.datetime(2014, 1, 1)]}) - df = pd.DataFrame(np.zeros((6, 2), dtype=int), columns=['a', 'b']) + df = pd.DataFrame(0, columns=list('ab'), index=range(6)) df['b'] = pd.NaT df.loc[0, 'b'] = pd.datetime(2012, 1, 1) df.loc[1, 'b'] = 1 df.loc[[2, 3], 'b'] = 'x', 'y' - A = pd.DataFrame([[13, pd.datetime(2013, 1, 1)], - [14, pd.datetime(2014, 1, 1)]]) - df.loc[[4, 5], ['a', 'b']] = A.values + A = np.array([[13, pd.datetime(2013, 1, 1)], + [14, pd.datetime(2014, 1, 1)]]) + df.loc[[4, 5], ['a', 'b']] = A assert_frame_equal(df, expected) def test_setitem_frame(self): From f7fb6429f4fce10eea6908e1445eac51f68c0a9d Mon Sep 17 00:00:00 2001 From: jcontesti <25779507+jcontesti@users.noreply.github.com> Date: Sat, 26 May 2018 20:06:18 +0200 Subject: [PATCH 5/5] TST: datetime objects in numpy array are now directly numpy datetime objects --- pandas/tests/frame/test_indexing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 5c032e089ebe4..7149c9e27408f 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1562,8 +1562,8 @@ def test_setitem_mixed_datetime(self): df.loc[0, 'b'] = pd.datetime(2012, 1, 1) df.loc[1, 'b'] = 1 df.loc[[2, 3], 'b'] = 'x', 'y' - A = np.array([[13, pd.datetime(2013, 1, 1)], - [14, pd.datetime(2014, 1, 1)]]) + A = np.array([[13, np.datetime64('2013-01-01T00:00:00')], + [14, np.datetime64('2014-01-01T00:00:00')]]) df.loc[[4, 5], ['a', 'b']] = A assert_frame_equal(df, expected)