Skip to content

Commit a12cb52

Browse files
committed
Parametrized setitem for index tests in TestSetitemCoercion
1 parent 86bd897 commit a12cb52

File tree

1 file changed

+33
-56
lines changed

1 file changed

+33
-56
lines changed

pandas/tests/indexing/test_coercion.py

+33-56
Original file line numberDiff line numberDiff line change
@@ -228,76 +228,53 @@ def _assert_setitem_index_conversion(self, original_series, loc_key,
228228
# check dtype explicitly for sure
229229
assert temp.index.dtype == expected_dtype
230230

231-
def test_setitem_index_object(self):
231+
@pytest.mark.parametrize("val,exp_dtype", [
232+
('x', np.object),
233+
(5, IndexError),
234+
(1.1, np.object)])
235+
def test_setitem_index_object(self, val, exp_dtype):
232236
obj = pd.Series([1, 2, 3, 4], index=list('abcd'))
233237
assert obj.index.dtype == np.object
234238

235-
# object + object -> object
236-
exp_index = pd.Index(list('abcdx'))
237-
self._assert_setitem_index_conversion(obj, 'x', exp_index, np.object)
238-
239-
# object + int -> IndexError, regarded as location
240-
temp = obj.copy()
241-
with pytest.raises(IndexError):
242-
temp[5] = 5
243-
244-
# object + float -> object
245-
exp_index = pd.Index(['a', 'b', 'c', 'd', 1.1])
246-
self._assert_setitem_index_conversion(obj, 1.1, exp_index, np.object)
239+
if exp_dtype is IndexError:
240+
# object + int -> IndexError, regarded as location
241+
temp = obj.copy()
242+
with pytest.raises(exp_dtype):
243+
temp[5] = 5
244+
else:
245+
exp_index = pd.Index(list('abcd') + [val])
246+
self._assert_setitem_index_conversion(obj, val, exp_index, exp_dtype)
247247

248-
def test_setitem_index_int64(self):
248+
@pytest.mark.parametrize("val,exp_dtype", [
249+
(5, np.int64),
250+
(1.1, np.float64),
251+
('x', np.object)])
252+
def test_setitem_index_int64(self, val, exp_dtype):
249253
# tests setitem with non-existing numeric key
250254
obj = pd.Series([1, 2, 3, 4])
251255
assert obj.index.dtype == np.int64
252256

253-
# int + int -> int
254-
exp_index = pd.Index([0, 1, 2, 3, 5])
255-
self._assert_setitem_index_conversion(obj, 5, exp_index, np.int64)
257+
exp_index = pd.Index([0, 1, 2, 3, val])
258+
self._assert_setitem_index_conversion(obj, val, exp_index, exp_dtype)
256259

257-
# int + float -> float
258-
exp_index = pd.Index([0, 1, 2, 3, 1.1])
259-
self._assert_setitem_index_conversion(obj, 1.1, exp_index, np.float64)
260-
261-
# int + object -> object
262-
exp_index = pd.Index([0, 1, 2, 3, 'x'])
263-
self._assert_setitem_index_conversion(obj, 'x', exp_index, np.object)
264-
265-
def test_setitem_index_float64(self):
260+
@pytest.mark.parametrize("val,exp_dtype", [
261+
(5, IndexError),
262+
(5.1, np.float64),
263+
('x', np.object)])
264+
def test_setitem_index_float64(self, val, exp_dtype):
266265
# tests setitem with non-existing numeric key
267266
obj = pd.Series([1, 2, 3, 4], index=[1.1, 2.1, 3.1, 4.1])
268267
assert obj.index.dtype == np.float64
269268

270-
# float + int -> int
271-
temp = obj.copy()
272-
# TODO_GH12747 The result must be float
273-
with pytest.raises(IndexError):
274-
temp[5] = 5
275-
276-
# float + float -> float
277-
exp_index = pd.Index([1.1, 2.1, 3.1, 4.1, 5.1])
278-
self._assert_setitem_index_conversion(obj, 5.1, exp_index, np.float64)
269+
if exp_dtype is IndexError:
270+
# float + int -> int
271+
temp = obj.copy()
272+
with pytest.raises(exp_dtype):
273+
temp[5] = 5
274+
pytest.xfail("TODO_GH12747 The result must be float")
279275

280-
# float + object -> object
281-
exp_index = pd.Index([1.1, 2.1, 3.1, 4.1, 'x'])
282-
self._assert_setitem_index_conversion(obj, 'x', exp_index, np.object)
283-
284-
def test_setitem_index_complex128(self):
285-
pass
286-
287-
def test_setitem_index_bool(self):
288-
pass
289-
290-
def test_setitem_index_datetime64(self):
291-
pass
292-
293-
def test_setitem_index_datetime64tz(self):
294-
pass
295-
296-
def test_setitem_index_timedelta64(self):
297-
pass
298-
299-
def test_setitem_index_period(self):
300-
pass
276+
exp_index = pd.Index([1.1, 2.1, 3.1, 4.1, val])
277+
self._assert_setitem_index_conversion(obj, val, exp_index, exp_dtype)
301278

302279

303280
class TestInsertIndexCoercion(CoercionBase):

0 commit comments

Comments
 (0)