From d1fe851d7ecd990ff14c6ea034a29d87e79815bf Mon Sep 17 00:00:00 2001 From: AlexGregory96 <49785867+AlexGregory96@users.noreply.github.com> Date: Sun, 20 Jun 2021 10:55:22 +0100 Subject: [PATCH 01/10] This is a test for issue 23478. --- .../indexing/multiindex/test_multiindex.py | 22 ++++++++++++++++++ path_to_file.xlsx | Bin 0 -> 5582 bytes 2 files changed, 22 insertions(+) create mode 100644 path_to_file.xlsx diff --git a/pandas/tests/indexing/multiindex/test_multiindex.py b/pandas/tests/indexing/multiindex/test_multiindex.py index 41c2c61154f08..216c5f5cfc0b9 100644 --- a/pandas/tests/indexing/multiindex/test_multiindex.py +++ b/pandas/tests/indexing/multiindex/test_multiindex.py @@ -1,3 +1,5 @@ +from itertools import combinations + import numpy as np import pandas._libs.index as _index @@ -98,3 +100,23 @@ def test_multiindex_with_datatime_level_preserves_freq(self): result = df.loc[0].index tm.assert_index_equal(result, dti) assert result.freq == dti.freq + + def test_concat_with_various_multiindex_dtypes(self): + # GH #23478 + columns_list = [ + MultiIndex.from_product([["a"], range(2)]), + MultiIndex.from_product([["a"], np.arange(2.0)]), + MultiIndex.from_product([["b"], ["A", "B"]]), + MultiIndex.from_product( + [["c"], pd.date_range(start="2017", end="2018", periods=2)] + ), + ] + + dfs = [ + DataFrame(np.zeros((1, len(columns))), columns=columns) + for columns in columns_list + ] + + for i, j in combinations(range(len(dfs)), 2): + with tm.assert_produces_warning(False): + pd.concat((dfs[i], dfs[j]), axis=1) diff --git a/path_to_file.xlsx b/path_to_file.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dfa25c98970e0f14d74cf15cb08bd1082065c914 GIT binary patch literal 5582 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 literal 0 HcmV?d00001 From 60a9dd932e70ecae432c005e05f83635f1e04b4c Mon Sep 17 00:00:00 2001 From: AlexGregory96 <49785867+AlexGregory96@users.noreply.github.com> Date: Mon, 21 Jun 2021 18:02:56 +0100 Subject: [PATCH 02/10] Parameterized the test. --- .../indexing/multiindex/test_multiindex.py | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_multiindex.py b/pandas/tests/indexing/multiindex/test_multiindex.py index 216c5f5cfc0b9..33db54ec6c130 100644 --- a/pandas/tests/indexing/multiindex/test_multiindex.py +++ b/pandas/tests/indexing/multiindex/test_multiindex.py @@ -1,6 +1,5 @@ -from itertools import combinations - import numpy as np +import pytest import pandas._libs.index as _index from pandas.errors import PerformanceWarning @@ -101,22 +100,32 @@ def test_multiindex_with_datatime_level_preserves_freq(self): tm.assert_index_equal(result, dti) assert result.freq == dti.freq - def test_concat_with_various_multiindex_dtypes(self): - # GH #23478 - columns_list = [ + @pytest.mark.parametrize( + "mi1", + [ MultiIndex.from_product([["a"], range(2)]), MultiIndex.from_product([["a"], np.arange(2.0)]), MultiIndex.from_product([["b"], ["A", "B"]]), MultiIndex.from_product( [["c"], pd.date_range(start="2017", end="2018", periods=2)] ), - ] - - dfs = [ - DataFrame(np.zeros((1, len(columns))), columns=columns) - for columns in columns_list - ] + ], + ) + @pytest.mark.parametrize( + "mi2", + [ + MultiIndex.from_product([["a"], range(2)]), + MultiIndex.from_product([["a"], np.arange(2.0)]), + MultiIndex.from_product([["b"], ["A", "B"]]), + MultiIndex.from_product( + [["c"], pd.date_range(start="2017", end="2018", periods=2)] + ), + ], + ) + def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): + # GH #23478 + df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) + df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) - for i, j in combinations(range(len(dfs)), 2): - with tm.assert_produces_warning(False): - pd.concat((dfs[i], dfs[j]), axis=1) + with tm.assert_produces_warning(False): + pd.concat((df1, df2), axis=1) From 07d6628c175a43471c87a2f6dbc1e523326027c1 Mon Sep 17 00:00:00 2001 From: AlexGregory96 <49785867+AlexGregory96@users.noreply.github.com> Date: Mon, 21 Jun 2021 19:18:37 +0100 Subject: [PATCH 03/10] change --- path_to_file.xlsx | Bin 5582 -> 5582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/path_to_file.xlsx b/path_to_file.xlsx index dfa25c98970e0f14d74cf15cb08bd1082065c914..a931f07b611c8345bc129fbb5a411d7e16eaecd8 100644 GIT binary patch delta 406 zcmX@7eNLMG9~{MX6A#MQJ7zN(3bg+3da}>YEZXJJ zuIba}iExREt+>g1a>~~K`wAn&GyXRmpZWdSUjAifjbBQJkfc zvMKraj=5cj%J=YWycT<4L4(BH>rd3e?|=WiPpW3;wwAwXe=P;X*7^3VU05@9&a?Rr z+J*V|Lf7ZtF2AU;@|2SvS7_eprPK6x1+`24`(WEpn|}AAt>H)64J#ks*Pb1Z;@Qo6 z81Jz%1HHR>F8e)3Fr$w1I)o9yZNdx^ncUC!3@lT@-wl?T%qI8}EbvLt4Cc=fn=AG`_RERN9(In5x(^NumaI7-yx7(42e;0lIU2KWNiBO(oTZYo zDfsx7x!s5IZF)Cei#@QSVa6QiqRp${|8|Y<+ZVID<^B2ovmOyU%nY}+eF`m_b-pp| z(XBtB`}XDDcU`uFK@oqzH`rUhflOJg(1Rp-EJ)0ZFvzzxY z-eYA3dUx|&_Ir$AMjhvM2qS{qgc&3I$aYL_Gi+Po;DK From efcd23afc9534016fd94ca2497b7d3f01d9bc5b1 Mon Sep 17 00:00:00 2001 From: AlexGregory96 <49785867+AlexGregory96@users.noreply.github.com> Date: Mon, 21 Jun 2021 19:26:13 +0100 Subject: [PATCH 04/10] change --- path_to_file.xlsx | Bin 5582 -> 5581 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/path_to_file.xlsx b/path_to_file.xlsx index a931f07b611c8345bc129fbb5a411d7e16eaecd8..dfffb8605310ad8daf138a69a6b169ee3341aaff 100644 GIT binary patch delta 569 zcmX@7eO8+%z?+#xgn@y9gW=7ri9BoT-^{uilrsI$l?y_o@zLk0q^|4&V-o@?ehF`zo~;}QjpH5Jm60uRqJQ&GNJpTF%2*Y5g+ ze&hFNtL1%`?!A<|AUDI7b(@I&yLY!-mi~2$nX#9tUViQ)+UZ2oK1F9-uC-$ty)#K6D}(*mR$7#sN*7~+dkbBgu#KxBY7Ba;XNEQTkE$}nb4mKBu)nP>~-{Fodi kstI;S-g1>aazJ;4vj9y+G4YAuWJV#;$vZ>^*o?t40Pj@TUjP6A delta 567 zcmX@BeNLMvz?+#xgn@y9gJHsqi9BoTC(O7S^n;_g?jlg^9wP&TAdpVUPYx)`FDTYe z&M!*UtH{kcJJB(l$xxv6f7g?JerC}whjvY$Hcy00R3zWoC~L({-jh?d{@+&^8J_XK z;rPt&&-U^!Gjp7+cgg(?lWWz&73+`va-yfZ<3hT8PI7i|qc%5GTs@V@r!cvvv7fWl$(F2?(;Oh9@z`+Y_bUBh_;OowrsG6VUO zd- Date: Tue, 22 Jun 2021 15:03:47 +0100 Subject: [PATCH 05/10] Changed the 'assert_produces_warning' argument to 'None'. --- pandas/tests/indexing/multiindex/test_multiindex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/multiindex/test_multiindex.py b/pandas/tests/indexing/multiindex/test_multiindex.py index 33db54ec6c130..3598ef7ed9ef0 100644 --- a/pandas/tests/indexing/multiindex/test_multiindex.py +++ b/pandas/tests/indexing/multiindex/test_multiindex.py @@ -127,5 +127,5 @@ def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) - with tm.assert_produces_warning(False): + with tm.assert_produces_warning(None): pd.concat((df1, df2), axis=1) From 239e4e1eeb4882f24937ed0af82ff07858f759bd Mon Sep 17 00:00:00 2001 From: AlexGregory96 Date: Sun, 11 Jul 2021 10:02:14 +0100 Subject: [PATCH 06/10] moved test_concat_with_various_multiindex_dtypes to test_index.py --- .../indexing/multiindex/test_multiindex.py | 31 ------------------- pandas/tests/reshape/concat/test_index.py | 30 ++++++++++++++++++ 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_multiindex.py b/pandas/tests/indexing/multiindex/test_multiindex.py index 3598ef7ed9ef0..41c2c61154f08 100644 --- a/pandas/tests/indexing/multiindex/test_multiindex.py +++ b/pandas/tests/indexing/multiindex/test_multiindex.py @@ -1,5 +1,4 @@ import numpy as np -import pytest import pandas._libs.index as _index from pandas.errors import PerformanceWarning @@ -99,33 +98,3 @@ def test_multiindex_with_datatime_level_preserves_freq(self): result = df.loc[0].index tm.assert_index_equal(result, dti) assert result.freq == dti.freq - - @pytest.mark.parametrize( - "mi1", - [ - MultiIndex.from_product([["a"], range(2)]), - MultiIndex.from_product([["a"], np.arange(2.0)]), - MultiIndex.from_product([["b"], ["A", "B"]]), - MultiIndex.from_product( - [["c"], pd.date_range(start="2017", end="2018", periods=2)] - ), - ], - ) - @pytest.mark.parametrize( - "mi2", - [ - MultiIndex.from_product([["a"], range(2)]), - MultiIndex.from_product([["a"], np.arange(2.0)]), - MultiIndex.from_product([["b"], ["A", "B"]]), - MultiIndex.from_product( - [["c"], pd.date_range(start="2017", end="2018", periods=2)] - ), - ], - ) - def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): - # GH #23478 - df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) - df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) - - with tm.assert_produces_warning(None): - pd.concat((df1, df2), axis=1) diff --git a/pandas/tests/reshape/concat/test_index.py b/pandas/tests/reshape/concat/test_index.py index bd845f73c7c69..24970aad51c8a 100644 --- a/pandas/tests/reshape/concat/test_index.py +++ b/pandas/tests/reshape/concat/test_index.py @@ -265,3 +265,33 @@ def test_concat_multiindex_dfs_with_deepcopy(self): tm.assert_frame_equal(result_copy, expected) result_no_copy = concat(example_dict, names=["testname"]) tm.assert_frame_equal(result_no_copy, expected) + + @pytest.mark.parametrize( + "mi1", + [ + MultiIndex.from_product([["a"], range(2)]), + MultiIndex.from_product([["a"], np.arange(2.0)]), + MultiIndex.from_product([["b"], ["A", "B"]]), + MultiIndex.from_product( + [["c"], pd.date_range(start="2017", end="2018", periods=2)] + ), + ], + ) + @pytest.mark.parametrize( + "mi2", + [ + MultiIndex.from_product([["a"], range(2)]), + MultiIndex.from_product([["a"], np.arange(2.0)]), + MultiIndex.from_product([["b"], ["A", "B"]]), + MultiIndex.from_product( + [["c"], pd.date_range(start="2017", end="2018", periods=2)] + ), + ], + ) + def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): + # GH #23478 + df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) + df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) + + with tm.assert_produces_warning(None): + concat((df1, df2), axis=1) From dfdb4fc03e1d16c5f95ccb83e23a3652338a13e4 Mon Sep 17 00:00:00 2001 From: AlexGregory96 Date: Sun, 11 Jul 2021 10:40:30 +0100 Subject: [PATCH 07/10] Removed path_to_file.xlsx --- path_to_file.xlsx | Bin 5581 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 path_to_file.xlsx diff --git a/path_to_file.xlsx b/path_to_file.xlsx deleted file mode 100644 index dfffb8605310ad8daf138a69a6b169ee3341aaff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5581 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 From d6f444c993764904cf937341ecd0a80dbf72c9d1 Mon Sep 17 00:00:00 2001 From: AlexGregory96 Date: Sun, 11 Jul 2021 12:36:04 +0100 Subject: [PATCH 08/10] Change method comment. --- pandas/tests/reshape/concat/test_index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/reshape/concat/test_index.py b/pandas/tests/reshape/concat/test_index.py index 24970aad51c8a..f5098ee6446b0 100644 --- a/pandas/tests/reshape/concat/test_index.py +++ b/pandas/tests/reshape/concat/test_index.py @@ -289,7 +289,7 @@ def test_concat_multiindex_dfs_with_deepcopy(self): ], ) def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): - # GH #23478 + # GitHub #23478 df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) From 19bbbd7241cba13fdb91538e07ce1818d9e0f580 Mon Sep 17 00:00:00 2001 From: AlexGregory96 Date: Sat, 21 Aug 2021 11:54:51 +0100 Subject: [PATCH 09/10] Add comparison between expected and actual result. --- pandas/tests/reshape/concat/test_index.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pandas/tests/reshape/concat/test_index.py b/pandas/tests/reshape/concat/test_index.py index 1b866007889df..5253ef886fdc9 100644 --- a/pandas/tests/reshape/concat/test_index.py +++ b/pandas/tests/reshape/concat/test_index.py @@ -293,5 +293,12 @@ def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) + expected = DataFrame( + np.zeros((1, len(mi1) + len(mi2))), + columns=MultiIndex.from_tuples(list(mi1) + list(mi2)), + ) + with tm.assert_produces_warning(None): - concat((df1, df2), axis=1) + result = concat((df1, df2), axis=1) + + tm.assert_frame_equal(expected, result) From 3a3a6af2810bcd46673ef1914b786826d72d6803 Mon Sep 17 00:00:00 2001 From: Alex-Gregory-1 Date: Sun, 19 Dec 2021 15:57:31 +0000 Subject: [PATCH 10/10] Remove from_product from parameterize and remove Multiindex.from_tuple. --- pandas/tests/reshape/concat/test_index.py | 54 ++++++++++++++--------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/pandas/tests/reshape/concat/test_index.py b/pandas/tests/reshape/concat/test_index.py index 6f19d66a8da27..35cf670398664 100644 --- a/pandas/tests/reshape/concat/test_index.py +++ b/pandas/tests/reshape/concat/test_index.py @@ -259,38 +259,50 @@ def test_concat_multiindex_dfs_with_deepcopy(self): tm.assert_frame_equal(result_no_copy, expected) @pytest.mark.parametrize( - "mi1", + "mi1_list", [ - MultiIndex.from_product([["a"], range(2)]), - MultiIndex.from_product([["a"], np.arange(2.0)]), - MultiIndex.from_product([["b"], ["A", "B"]]), - MultiIndex.from_product( - [["c"], pd.date_range(start="2017", end="2018", periods=2)] - ), + [["a"], range(2)], + [["b"], np.arange(2.0, 4.0)], + [["c"], ["A", "B"]], + [["d"], pd.date_range(start="2017", end="2018", periods=2)], ], ) @pytest.mark.parametrize( - "mi2", + "mi2_list", [ - MultiIndex.from_product([["a"], range(2)]), - MultiIndex.from_product([["a"], np.arange(2.0)]), - MultiIndex.from_product([["b"], ["A", "B"]]), - MultiIndex.from_product( - [["c"], pd.date_range(start="2017", end="2018", periods=2)] - ), + [["a"], range(2)], + [["b"], np.arange(2.0, 4.0)], + [["c"], ["A", "B"]], + [["d"], pd.date_range(start="2017", end="2018", periods=2)], ], ) - def test_concat_with_various_multiindex_dtypes(self, mi1, mi2): + def test_concat_with_various_multiindex_dtypes( + self, mi1_list: list, mi2_list: list + ): # GitHub #23478 + mi1 = MultiIndex.from_product(mi1_list) + mi2 = MultiIndex.from_product(mi2_list) + df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1) df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2) - expected = DataFrame( - np.zeros((1, len(mi1) + len(mi2))), - columns=MultiIndex.from_tuples(list(mi1) + list(mi2)), - ) + if mi1_list[0] == mi2_list[0]: + expected_mi = MultiIndex( + levels=[mi1_list[0], list(mi1_list[1])], + codes=[[0, 0, 0, 0], [0, 1, 0, 1]], + ) + else: + expected_mi = MultiIndex( + levels=[ + mi1_list[0] + mi2_list[0], + list(mi1_list[1]) + list(mi2_list[1]), + ], + codes=[[0, 0, 1, 1], [0, 1, 2, 3]], + ) + + expected_df = DataFrame(np.zeros((1, len(expected_mi))), columns=expected_mi) with tm.assert_produces_warning(None): - result = concat((df1, df2), axis=1) + result_df = concat((df1, df2), axis=1) - tm.assert_frame_equal(expected, result) + tm.assert_frame_equal(expected_df, result_df)