From 4c4bcf9741bb1ab389944fb96a2321a88f09e750 Mon Sep 17 00:00:00 2001 From: Shiv Gupta <18354771+shiv-io@users.noreply.github.com> Date: Mon, 26 Jul 2021 19:54:34 +0530 Subject: [PATCH 1/4] TST GH #26779 --- pandas/tests/generic/test_frame.py | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pandas/tests/generic/test_frame.py b/pandas/tests/generic/test_frame.py index 49a1dc8bbb21c..b88cd3ea64842 100644 --- a/pandas/tests/generic/test_frame.py +++ b/pandas/tests/generic/test_frame.py @@ -10,6 +10,7 @@ MultiIndex, Series, date_range, + Timestamp, ) import pandas._testing as tm from pandas.tests.generic.test_generic import Generic @@ -87,6 +88,37 @@ def test_metadata_propagation_indiv_resample(self): result = df.resample("1T") self.check_metadata(df, result) + def test_column_types_consistent(self): + # GH 26779 + df = DataFrame( + data={ + "channel": [1, 2, 3], + "A": ["String 1", np.NaN, "String 2"], + "B": [ + Timestamp("2019-06-11 11:00:00"), + np.NaN, + Timestamp("2019-06-11 12:00:00"), + ], + } + ) + df2 = pd.DataFrame( + data={"A": ["String 3"], "B": [Timestamp("2019-06-11 12:00:00")]} + ) + # Change Columns A and B to df2.values wherever Column A is NaN + df.loc[df["A"].isna(), ["A", "B"]] = df2.values + expected = DataFrame( + data={ + "channel": [1, 2, 3], + "A": ["String 1", "String 3", "String 2"], + "B": [ + Timestamp("2019-06-11 11:00:00"), + Timestamp("2019-06-11 12:00:00"), + Timestamp("2019-06-11 12:00:00"), + ], + } + ) + tm.assert_frame_equal(df, expected) + def test_metadata_propagation_indiv(self): # merging with override # GH 6923 From f7478f41588f12755180dd1abba6302b28fb4e2f Mon Sep 17 00:00:00 2001 From: Shiv Gupta <18354771+shiv-io@users.noreply.github.com> Date: Mon, 26 Jul 2021 20:06:50 +0530 Subject: [PATCH 2/4] Fix DataFrame constructor --- pandas/tests/generic/test_frame.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/generic/test_frame.py b/pandas/tests/generic/test_frame.py index b88cd3ea64842..752b56891c1d4 100644 --- a/pandas/tests/generic/test_frame.py +++ b/pandas/tests/generic/test_frame.py @@ -101,7 +101,7 @@ def test_column_types_consistent(self): ], } ) - df2 = pd.DataFrame( + df2 = DataFrame( data={"A": ["String 3"], "B": [Timestamp("2019-06-11 12:00:00")]} ) # Change Columns A and B to df2.values wherever Column A is NaN From 13005d4c3e57bd037483a132a53c8ddbbd0b036c Mon Sep 17 00:00:00 2001 From: Shiv Gupta <18354771+shiv-io@users.noreply.github.com> Date: Tue, 27 Jul 2021 11:19:48 +0530 Subject: [PATCH 3/4] Move test to test_loc.py --- pandas/tests/generic/test_frame.py | 32 ------------------------------ pandas/tests/indexing/test_loc.py | 31 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/pandas/tests/generic/test_frame.py b/pandas/tests/generic/test_frame.py index 752b56891c1d4..49a1dc8bbb21c 100644 --- a/pandas/tests/generic/test_frame.py +++ b/pandas/tests/generic/test_frame.py @@ -10,7 +10,6 @@ MultiIndex, Series, date_range, - Timestamp, ) import pandas._testing as tm from pandas.tests.generic.test_generic import Generic @@ -88,37 +87,6 @@ def test_metadata_propagation_indiv_resample(self): result = df.resample("1T") self.check_metadata(df, result) - def test_column_types_consistent(self): - # GH 26779 - df = DataFrame( - data={ - "channel": [1, 2, 3], - "A": ["String 1", np.NaN, "String 2"], - "B": [ - Timestamp("2019-06-11 11:00:00"), - np.NaN, - Timestamp("2019-06-11 12:00:00"), - ], - } - ) - df2 = DataFrame( - data={"A": ["String 3"], "B": [Timestamp("2019-06-11 12:00:00")]} - ) - # Change Columns A and B to df2.values wherever Column A is NaN - df.loc[df["A"].isna(), ["A", "B"]] = df2.values - expected = DataFrame( - data={ - "channel": [1, 2, 3], - "A": ["String 1", "String 3", "String 2"], - "B": [ - Timestamp("2019-06-11 11:00:00"), - Timestamp("2019-06-11 12:00:00"), - Timestamp("2019-06-11 12:00:00"), - ], - } - ) - tm.assert_frame_equal(df, expected) - def test_metadata_propagation_indiv(self): # merging with override # GH 6923 diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 85accac5a8235..2ab21c9bea49b 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -143,6 +143,37 @@ def test_setitem_from_duplicate_axis(self): ) tm.assert_frame_equal(df, expected) + def test_column_types_consistent(self): + # GH 26779 + df = DataFrame( + data={ + "channel": [1, 2, 3], + "A": ["String 1", np.NaN, "String 2"], + "B": [ + Timestamp("2019-06-11 11:00:00"), + np.NaN, + Timestamp("2019-06-11 12:00:00"), + ], + } + ) + df2 = DataFrame( + data={"A": ["String 3"], "B": [Timestamp("2019-06-11 12:00:00")]} + ) + # Change Columns A and B to df2.values wherever Column A is NaN + df.loc[df["A"].isna(), ["A", "B"]] = df2.values + expected = DataFrame( + data={ + "channel": [1, 2, 3], + "A": ["String 1", "String 3", "String 2"], + "B": [ + Timestamp("2019-06-11 11:00:00"), + Timestamp("2019-06-11 12:00:00"), + Timestamp("2019-06-11 12:00:00"), + ], + } + ) + tm.assert_frame_equal(df, expected) + class TestLoc2: # TODO: better name, just separating out things that rely on base class From 60c87ab3fa700657bb587bbb04f8475195113c2a Mon Sep 17 00:00:00 2001 From: Shiv Gupta <18354771+shiv-io@users.noreply.github.com> Date: Tue, 27 Jul 2021 12:14:26 +0530 Subject: [PATCH 4/4] Use NaT instead of NaN --- pandas/tests/indexing/test_loc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 2ab21c9bea49b..c7c745be279ee 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -151,7 +151,7 @@ def test_column_types_consistent(self): "A": ["String 1", np.NaN, "String 2"], "B": [ Timestamp("2019-06-11 11:00:00"), - np.NaN, + pd.NaT, Timestamp("2019-06-11 12:00:00"), ], }