Skip to content

Commit 3622744

Browse files
committed
Parametrize some tests
1 parent 5469912 commit 3622744

File tree

2 files changed

+39
-73
lines changed

2 files changed

+39
-73
lines changed

pandas/tests/frame/test_indexing.py

+18-36
Original file line numberDiff line numberDiff line change
@@ -208,47 +208,29 @@ def test_setitem_list_of_tuples(self, float_frame):
208208
expected = Series(tuples, index=float_frame.index, name="tuples")
209209
assert_series_equal(result, expected)
210210

211-
def test_setitem_list_all_missing_columns_scalar(self, float_frame):
212-
# GH 26534
213-
result = float_frame.copy()
214-
result[["E", "F"]] = 1
215-
expected = float_frame.copy()
216-
# force the dtypes to be float as currently multcolumn assignment does not
217-
# change column dtype from float to int even when it's being assigned an int
218-
expected["E"] = 1.0
219-
expected["F"] = 1.0
220-
assert_frame_equal(result, expected)
221-
222-
def test_setitem_list_some_missing_columns_list(self, float_frame):
223-
# GH 26534
224-
result = float_frame.copy()
225-
result[["A", "E"]] = [1, 2]
226-
expected = float_frame.copy()
227-
# force the dtypes to be float as currently multcolumn assignment does not
228-
# change column dtype from float to int even when it's being assigned an int
229-
expected["A"] = 1.0
230-
expected["E"] = 2.0
231-
assert_frame_equal(result, expected)
232-
233-
def test_setitem_list_some_missing_columns_dataframe(self, float_frame):
211+
@pytest.mark.parametrize("columns", [["A", "E"], ["E", "F"]])
212+
@pytest.mark.parametrize(
213+
"box",
214+
[
215+
lambda x: 1,
216+
lambda x: [1, 2],
217+
lambda x: np.array([1, 2]),
218+
lambda x: x[["B", "C"]],
219+
lambda x: x[["B", "A"]].values,
220+
lambda x: x[["A", "C"]].values.tolist(),
221+
],
222+
)
223+
def test_setitem_list_missing_columns(self, float_frame, columns, box):
234224
# GH 26534
235225
result = float_frame.copy()
236-
result[["A", "E"]] = float_frame[["B", "C"]]
226+
result[columns] = box(float_frame)
237227
expected = float_frame.copy()
238-
expected["A"] = float_frame["B"]
239-
expected["E"] = float_frame["C"]
228+
for col in columns:
229+
if col not in expected.columns:
230+
expected[col] = np.nan
231+
expected[columns] = box(float_frame)
240232
assert_frame_equal(result, expected)
241233

242-
def test_setitem_list_some_missing_columns_2dlist(self):
243-
# GH 26534
244-
result = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
245-
result[["B", "C", "D"]] = [[7, 8, 9], [10, 11, 12], [13, 14, 15]]
246-
expected = pd.DataFrame(
247-
[[1, 7, 8, 9], [3, 10, 11, 12], [5, 13, 14, 15]],
248-
columns=["A", "B", "C", "D"],
249-
)
250-
tm.assert_frame_equal(result, expected)
251-
252234
def test_setitem_mulit_index(self):
253235
# GH7655, test that assigning to a sub-frame of a frame
254236
# with multi-index columns aligns both rows and columns

pandas/tests/indexing/test_loc.py

+21-37
Original file line numberDiff line numberDiff line change
@@ -808,45 +808,29 @@ def test_loc_setitem_with_scalar_index(self, indexer, value):
808808

809809
assert is_scalar(result) and result == "Z"
810810

811-
def test_loc_setitem_missing_columns_scalar_index_list_value(self):
812-
# GH 26534
813-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
814-
df.loc[1, ["C", "D"]] = [7, 8]
815-
expected = pd.DataFrame(
816-
[[1, 2, np.nan, np.nan], [3, 4, 7, 8], [5, 6, np.nan, np.nan]],
817-
columns=["A", "B", "C", "D"],
818-
)
819-
tm.assert_frame_equal(df, expected)
820-
821-
def test_loc_setitem_missing_columns_full_index_dataframe_value(self):
822-
# GH 26534
823-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
824-
df2 = pd.DataFrame([[7, 8], [9, 10], [11, 12]], columns=["A", "C"])
825-
df.loc[:, ["A", "C"]] = df2
826-
expected = pd.DataFrame(
827-
[[7, 2, 8], [9, 4, 10], [11, 6, 12]], columns=["A", "B", "C"]
828-
)
829-
tm.assert_frame_equal(df, expected)
830-
831-
def test_loc_setitem_missing_columns_list_index_scalar_value(self):
832-
# GH 26534
833-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
834-
df.loc[[0, 2], ["B", "C", "D"]] = 9
835-
expected = pd.DataFrame(
836-
[[1, 9, 9, 9], [3, 4, np.nan, np.nan], [5, 9, 9, 9]],
837-
columns=["A", "B", "C", "D"],
838-
)
839-
tm.assert_frame_equal(df, expected)
840-
841-
def test_loc_setitem_missing_columns_range_index_2dlist_value(self):
811+
@pytest.mark.parametrize(
812+
"index,box",
813+
[
814+
((1, ["C", "D"]), [7, 8]),
815+
(
816+
(slice(None, None, None), ["A", "C"]),
817+
pd.DataFrame([[7, 8], [9, 10], [11, 12]], columns=["A", "C"]),
818+
),
819+
(([0, 2], ["B", "C", "D"]), 9),
820+
((slice(1, 3, None), ["B", "C", "D"]), [[7, 8, 9], [10, 11, 12]]),
821+
],
822+
)
823+
def test_loc_setitem_missing_columns(self, index, box):
842824
# GH 26534
843825
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
844-
df.loc[1:3, ["B", "C", "D"]] = [[7, 8, 9], [10, 11, 12]]
845-
expected = pd.DataFrame(
846-
[[1, 2, np.nan, np.nan], [3, 7, 8, 9], [5, 10, 11, 12]],
847-
columns=["A", "B", "C", "D"],
848-
)
849-
tm.assert_frame_equal(df, expected)
826+
result = df.copy()
827+
result.loc[index] = box
828+
expected = df.copy()
829+
for col in index[1]:
830+
if col not in expected.columns:
831+
expected[col] = np.nan
832+
expected.loc[index] = box
833+
tm.assert_frame_equal(result, expected)
850834

851835
def test_loc_coercion(self):
852836

0 commit comments

Comments
 (0)