Skip to content

Commit 4170863

Browse files
committed
Parametrize some tests
1 parent b18c6f7 commit 4170863

File tree

2 files changed

+39
-73
lines changed

2 files changed

+39
-73
lines changed

pandas/tests/frame/test_indexing.py

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -204,47 +204,29 @@ def test_setitem_list_of_tuples(self, float_frame):
204204
expected = Series(tuples, index=float_frame.index, name="tuples")
205205
tm.assert_series_equal(result, expected)
206206

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

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

pandas/tests/indexing/test_loc.py

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -856,45 +856,29 @@ def test_loc_setitem_with_scalar_index(self, indexer, value):
856856

857857
assert is_scalar(result) and result == "Z"
858858

859-
def test_loc_setitem_missing_columns_scalar_index_list_value(self):
860-
# GH 26534
861-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
862-
df.loc[1, ["C", "D"]] = [7, 8]
863-
expected = pd.DataFrame(
864-
[[1, 2, np.nan, np.nan], [3, 4, 7, 8], [5, 6, np.nan, np.nan]],
865-
columns=["A", "B", "C", "D"],
866-
)
867-
tm.assert_frame_equal(df, expected)
868-
869-
def test_loc_setitem_missing_columns_full_index_dataframe_value(self):
870-
# GH 26534
871-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
872-
df2 = pd.DataFrame([[7, 8], [9, 10], [11, 12]], columns=["A", "C"])
873-
df.loc[:, ["A", "C"]] = df2
874-
expected = pd.DataFrame(
875-
[[7, 2, 8], [9, 4, 10], [11, 6, 12]], columns=["A", "B", "C"]
876-
)
877-
tm.assert_frame_equal(df, expected)
878-
879-
def test_loc_setitem_missing_columns_list_index_scalar_value(self):
880-
# GH 26534
881-
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
882-
df.loc[[0, 2], ["B", "C", "D"]] = 9
883-
expected = pd.DataFrame(
884-
[[1, 9, 9, 9], [3, 4, np.nan, np.nan], [5, 9, 9, 9]],
885-
columns=["A", "B", "C", "D"],
886-
)
887-
tm.assert_frame_equal(df, expected)
888-
889-
def test_loc_setitem_missing_columns_range_index_2dlist_value(self):
859+
@pytest.mark.parametrize(
860+
"index,box",
861+
[
862+
((1, ["C", "D"]), [7, 8]),
863+
(
864+
(slice(None, None, None), ["A", "C"]),
865+
pd.DataFrame([[7, 8], [9, 10], [11, 12]], columns=["A", "C"]),
866+
),
867+
(([0, 2], ["B", "C", "D"]), 9),
868+
((slice(1, 3, None), ["B", "C", "D"]), [[7, 8, 9], [10, 11, 12]]),
869+
],
870+
)
871+
def test_loc_setitem_missing_columns(self, index, box):
890872
# GH 26534
891873
df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
892-
df.loc[1:3, ["B", "C", "D"]] = [[7, 8, 9], [10, 11, 12]]
893-
expected = pd.DataFrame(
894-
[[1, 2, np.nan, np.nan], [3, 7, 8, 9], [5, 10, 11, 12]],
895-
columns=["A", "B", "C", "D"],
896-
)
897-
tm.assert_frame_equal(df, expected)
874+
result = df.copy()
875+
result.loc[index] = box
876+
expected = df.copy()
877+
for col in index[1]:
878+
if col not in expected.columns:
879+
expected[col] = np.nan
880+
expected.loc[index] = box
881+
tm.assert_frame_equal(result, expected)
898882

899883
def test_loc_coercion(self):
900884

0 commit comments

Comments
 (0)