예제 #1
0
    def test_getitem_ndarray_3d(self, index, frame_or_series, indexer_sli):
        # GH 25567
        obj = gen_obj(frame_or_series, index)
        idxr = indexer_sli(obj)
        nd3 = np.random.randint(5, size=(2, 2, 2))

        msgs = []
        if frame_or_series is Series and indexer_sli in [tm.setitem, tm.iloc]:
            msgs.append(
                r"Wrong number of dimensions. values.ndim != ndim \[3 != 1\]")
        if frame_or_series is Series or indexer_sli is tm.iloc:
            msgs.append(
                r"Buffer has wrong number of dimensions \(expected 1, got 3\)")
        if indexer_sli is tm.loc or (frame_or_series is Series
                                     and indexer_sli is tm.setitem):
            msgs.append("Cannot index with multidimensional key")
        if frame_or_series is DataFrame and indexer_sli is tm.setitem:
            msgs.append("Index data must be 1-dimensional")
        if isinstance(index, pd.IntervalIndex) and indexer_sli is tm.iloc:
            msgs.append("Index data must be 1-dimensional")
        if len(index) == 0 or isinstance(index, pd.MultiIndex):
            msgs.append("positional indexers are out-of-bounds")
        msg = "|".join(msgs)

        potential_errors = (IndexError, ValueError, NotImplementedError)
        with pytest.raises(potential_errors, match=msg):
            with tm.assert_produces_warning(DeprecationWarning,
                                            check_stacklevel=False):
                idxr[nd3]
예제 #2
0
    def test_getitem_ndarray_3d(self, index, frame_or_series, indexer_sli,
                                using_array_manager):
        # GH 25567
        obj = gen_obj(frame_or_series, index)
        idxr = indexer_sli(obj)
        nd3 = np.random.randint(5, size=(2, 2, 2))

        msgs = []
        if frame_or_series is Series and indexer_sli in [tm.setitem, tm.iloc]:
            msgs.append(
                r"Wrong number of dimensions. values.ndim > ndim \[3 > 1\]")
            if using_array_manager:
                msgs.append("Passed array should be 1-dimensional")
        if frame_or_series is Series or indexer_sli is tm.iloc:
            msgs.append(
                r"Buffer has wrong number of dimensions \(expected 1, got 3\)")
            if using_array_manager:
                msgs.append("indexer should be 1-dimensional")
        if indexer_sli is tm.loc or (frame_or_series is Series
                                     and indexer_sli is tm.setitem):
            msgs.append("Cannot index with multidimensional key")
        if frame_or_series is DataFrame and indexer_sli is tm.setitem:
            msgs.append("Index data must be 1-dimensional")
        if isinstance(index, pd.IntervalIndex) and indexer_sli is tm.iloc:
            msgs.append("Index data must be 1-dimensional")
        if isinstance(index,
                      (pd.TimedeltaIndex, pd.DatetimeIndex, pd.PeriodIndex)):
            msgs.append("Data must be 1-dimensional")
        if len(index) == 0 or isinstance(index, pd.MultiIndex):
            msgs.append("positional indexers are out-of-bounds")
        msg = "|".join(msgs)

        potential_errors = (IndexError, ValueError, NotImplementedError)
        with pytest.raises(potential_errors, match=msg):
            idxr[nd3]
예제 #3
0
    def test_setitem_ndarray_3d(self, index, frame_or_series, indexer_sli):
        # GH 25567
        obj = gen_obj(frame_or_series, index)
        idxr = indexer_sli(obj)
        nd3 = np.random.randint(5, size=(2, 2, 2))

        if indexer_sli is tm.iloc:
            err = ValueError
            msg = f"Cannot set values with ndim > {obj.ndim}"
        elif (isinstance(index, pd.IntervalIndex) and indexer_sli is tm.setitem
              and obj.ndim == 1):
            err = AttributeError
            msg = (
                "'pandas._libs.interval.IntervalTree' object has no attribute 'get_loc'"
            )
        else:
            err = ValueError
            msg = "|".join([
                r"Buffer has wrong number of dimensions \(expected 1, got 3\)",
                "Cannot set values with ndim > 1",
                "Index data must be 1-dimensional",
                "Array conditional must be same shape as self",
            ])

        with pytest.raises(err, match=msg):
            idxr[nd3] = 0
예제 #4
0
    def test_setitem_ndarray_3d(self, index, frame_or_series, indexer_sli):
        # GH 25567
        obj = gen_obj(frame_or_series, index)
        idxr = indexer_sli(obj)
        nd3 = np.random.randint(5, size=(2, 2, 2))

        if indexer_sli.__name__ == "iloc":
            err = ValueError
            msg = f"Cannot set values with ndim > {obj.ndim}"
        elif (isinstance(index, pd.IntervalIndex)
              and indexer_sli.__name__ == "setitem" and obj.ndim == 1):
            err = AttributeError
            msg = (
                "'pandas._libs.interval.IntervalTree' object has no attribute 'get_loc'"
            )
        else:
            err = ValueError
            msg = r"Buffer has wrong number of dimensions \(expected 1, got 3\)|"

        with pytest.raises(err, match=msg):
            idxr[nd3] = 0
예제 #5
0
    def test_setitem_ndarray_3d(self, index, frame_or_series, indexer_sli):
        # GH 25567
        obj = gen_obj(frame_or_series, index)
        idxr = indexer_sli(obj)
        nd3 = np.random.randint(5, size=(2, 2, 2))

        if indexer_sli is tm.iloc:
            err = ValueError
            msg = f"Cannot set values with ndim > {obj.ndim}"
        else:
            err = ValueError
            msg = "|".join([
                r"Buffer has wrong number of dimensions \(expected 1, got 3\)",
                "Cannot set values with ndim > 1",
                "Index data must be 1-dimensional",
                "Data must be 1-dimensional",
                "Array conditional must be same shape as self",
            ])

        with pytest.raises(err, match=msg):
            idxr[nd3] = 0