Skip to content
Snippets Groups Projects
Commit 4efcc3fc authored by Bert Palm's avatar Bert Palm 🎇
Browse files

__set__tests

parent 3392d389
No related branches found
No related tags found
1 merge request!2Develop
......@@ -56,7 +56,9 @@ class _LocIndexer(_Indexer):
align = False
if is_dios_like(rkey) or is_nested_list_like(rkey):
raise ValueError("Cannot index with multidimensional key")
if is_bool_series(rkey):
if is_bool_indexer(rkey):
if not isinstance(rkey, pd.Series):
raise ValueError("Must pass Series with boolean values only")
rkey, align = rkey[rkey], True # kill `False`
return rkey, align
......
from dios import *
import pytest
s1 = pd.Series(range(10), index=range(10))
s2 = pd.Series(range(5, 10), index=range(5, 10))
s3 = pd.Series(range(1, 30, 2), index=range(1, 30, 2))
s4 = pd.Series(np.linspace(7, 13, 9), index=range(3, 12))
s1.name, s2.name, s3.name, s4.name = 'a', 'b', 'c', 'd'
d1 = DictOfSeries(data=dict(a=s1.copy(), b=s2.copy(), c=s3.copy(), d=s4.copy()))
blist = [True,False,False,True]
b = pd.Series([True, False] * 5, index=[1,2,3,4,5] + [6,8,10,12,14])
B = d1 > 5
@pytest.mark.parametrize(('idxer', 'exp'), [(slice(None), [s1==s1, s2==s2, s3==s3, s4==s4]),
(B, [s1>5, s2>5, s3>5, s4>5])
])
def test__setitem_single(idxer, exp):
d = d1.copy()
d[idxer] = 99
for i, c in enumerate(d1):
assert ((d[c] == 99) == exp[i]).all()
@pytest.mark.parametrize(('idxer', 'exp'), [(slice(None), [s1==s1, s2==s2, s3==s3, s4==s4]),
(blist, [s1==s1, s2!=s2, s3!=s3, s4==s4]),
])
def test__setitem_scalar_loc(idxer, exp):
d = d1.copy()
d.loc[:,idxer] = 99
for i, c in enumerate(d1):
assert ((d[c] == 99) == exp[i]).all()
@pytest.mark.parametrize(('idxer', 'exp'), [(0, s1), (1, s2), (2, s3), (3, s4),
(-1, s4), (-2, s3), (-3, s2), (-4, s1)])
def test__setitem_single_iloc(idxer, exp):
a = d1.iloc[:, idxer]
assert isinstance(a, pd.Series)
assert (a == exp).all()
@pytest.mark.parametrize(('idxer', 'exp'), [((1, 0), s1), ((3, -2), s3), ((-1, -1), s4)])
def test__setitem_scalar_iloc(idxer, exp):
a = d1.iloc[idxer]
assert is_scalar(a)
assert a == exp.iloc[idxer[0]]
@pytest.mark.parametrize('idxer', ['x', '2', 1, None, ])
def test__setitem_single_fail(idxer):
with pytest.raises(KeyError):
a = d1[idxer]
print(idxer, a)
@pytest.mark.parametrize('idxer', ['x', '2', 1, None, ])
def test__setitem_single_loc_fail(idxer):
with pytest.raises((KeyError, TypeError)):
a = d1.loc[:, idxer]
@pytest.mark.parametrize('idxer', [-5, 99, 'a', '2', None, ])
def test__setitem_single_iloc_fail(idxer):
with pytest.raises(KeyError):
a = d1.iloc[:, idxer]
BLIST = [True, False, False, True]
LISTIDXER = [['a'], ['a', 'c'], pd.Series(['a', 'c'])]
BOOLIDXER = [pd.Series(BLIST), d1.copy() > 10]
SLICEIDXER = [slice(None), slice(-3, -1), slice(-1, 3), slice(None, None, 3)]
MULTIIDXER = [] # [d1 > 9, d1 != d1, d1 == d1]
EMPTYIDEXER = [[], pd.Series(), slice(3, 3), slice(3, -1), DictOfSeries()]
INDEXERS = LISTIDXER + BOOLIDXER + SLICEIDXER + MULTIIDXER + EMPTYIDEXER
@pytest.mark.parametrize('idxer', INDEXERS)
def test__setitem__(idxer):
d = d1[idxer]
assert isinstance(d, DictOfSeries)
FAIL_INDEXERS = [['z'], ['a', 'z'], pd.Series(['a', 'z']), BLIST, DictOfSeries(dict(a=[1, 2, 3]))]
@pytest.mark.parametrize('idxer', FAIL_INDEXERS)
def test__setitem__fail(idxer):
with pytest.raises((ValueError, KeyError)):
d1[idxer]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment