Exemplo n.º 1
0
 def test_append_to_another(self):
     # hits Index._concat
     fst = Index(["a", "b"])
     snd = CategoricalIndex(["d", "e"])
     result = fst.append(snd)
     expected = Index(["a", "b", "d", "e"])
     tm.assert_index_equal(result, expected)
Exemplo n.º 2
0
def test_append_index():
    idx1 = Index([1.1, 1.2, 1.3])
    idx2 = pd.date_range("2011-01-01", freq="D", periods=3, tz="Asia/Tokyo")
    idx3 = Index(["A", "B", "C"])

    midx_lv2 = MultiIndex.from_arrays([idx1, idx2])
    midx_lv3 = MultiIndex.from_arrays([idx1, idx2, idx3])

    result = idx1.append(midx_lv2)

    # see gh-7112
    tz = pytz.timezone("Asia/Tokyo")
    expected_tuples = [
        (1.1, tz.localize(datetime(2011, 1, 1))),
        (1.2, tz.localize(datetime(2011, 1, 2))),
        (1.3, tz.localize(datetime(2011, 1, 3))),
    ]
    expected = Index([1.1, 1.2, 1.3] + expected_tuples)
    tm.assert_index_equal(result, expected)

    result = midx_lv2.append(idx1)
    expected = Index(expected_tuples + [1.1, 1.2, 1.3])
    tm.assert_index_equal(result, expected)

    result = midx_lv2.append(midx_lv2)
    expected = MultiIndex.from_arrays([idx1.append(idx1), idx2.append(idx2)])
    tm.assert_index_equal(result, expected)

    result = midx_lv2.append(midx_lv3)
    tm.assert_index_equal(result, expected)

    result = midx_lv3.append(midx_lv2)
    expected = Index._simple_new(
        np.array(
            [
                (1.1, tz.localize(datetime(2011, 1, 1)), "A"),
                (1.2, tz.localize(datetime(2011, 1, 2)), "B"),
                (1.3, tz.localize(datetime(2011, 1, 3)), "C"),
            ]
            + expected_tuples,
            dtype=object,
        ),
        None,
    )
    tm.assert_index_equal(result, expected)
Exemplo n.º 3
0
    def test_append_multiple(self):
        index = Index(["a", "b", "c", "d", "e", "f"])

        foos = [index[:2], index[2:4], index[4:]]
        result = foos[0].append(foos[1:])
        tm.assert_index_equal(result, index)

        # empty
        result = index.append([])
        tm.assert_index_equal(result, index)
Exemplo n.º 4
0
 def _concat_index(cls, prev_index: pd.Index, cur_index: pd.Index):
     if isinstance(prev_index, pd.RangeIndex) and \
             isinstance(cur_index, pd.RangeIndex):
         # handle RangeIndex that append may generate huge amount of data
         # e.g. pd.RangeIndex(10_000) and pd.RangeIndex(10_000)
         # will generate a Int64Index full of data
         # for details see GH#1647
         prev_stop = prev_index.start + prev_index.size * prev_index.step
         cur_start = cur_index.start
         if prev_stop == cur_start and prev_index.step == cur_index.step:
             # continuous RangeIndex, still return RangeIndex
             return prev_index.append(cur_index)
         else:
             # otherwise, return an empty index
             return pd.Index([], dtype=prev_index.dtype)
     elif isinstance(prev_index, pd.RangeIndex):
         return pd.Index([], prev_index.dtype).append(cur_index)
     elif isinstance(cur_index, pd.RangeIndex):
         return prev_index.append(pd.Index([], cur_index.dtype))
     return prev_index.append(cur_index)
Exemplo n.º 5
0
 def _condition_logic(base_idx: pd.Index, sub_select_idx: pd.Index, state_idx: pd.Index, condition_idx: pd.Index,
                      logic: str) -> pd.Index:
     if str(logic).upper() == 'ALL':
         return base_idx.intersection(condition_idx).sort_values()
     elif str(logic).upper() == 'ANY':
         return sub_select_idx.intersection(condition_idx).sort_values()
     elif str(logic).upper() == 'AND':
         return state_idx.intersection(condition_idx).sort_values()
     elif str(logic).upper() == 'NAND':
         return sub_select_idx.drop(state_idx.intersection(condition_idx)).sort_values()
     elif str(logic).upper() == 'OR':
         return state_idx.append(state_idx.union(condition_idx)).drop_duplicates().sort_values()
     elif str(logic).upper() == 'NOR':
         result = state_idx.append(state_idx.union(condition_idx)).drop_duplicates().sort_values()
         return sub_select_idx.drop(result)
     elif str(logic).upper() == 'NOT':
         return state_idx.difference(condition_idx)
     elif str(logic).upper() == 'XOR':
         return state_idx.union(condition_idx).difference(state_idx.intersection(condition_idx))
     raise ValueError(f"The logic '{logic}' must be AND, NAND, OR, NOR, NOT, XOR ANY or ALL")
Exemplo n.º 6
0
 def _reindex(self):
     if self.wavelengths is not None:
         wv = Index(np.round(self.wavelengths, decimals=self.tolerance))
         if self._metadata_index is not None:
             index = wv.append(Index(self._metadata_index))
         else:
             index = wv
         try:
             # This could be cleaner because if the df is square this will fail.
             self.index = index
         except:
             self.columns = index
Exemplo n.º 7
0
    def test_concatlike_same_dtypes(self, item):
        # GH 13660
        typ1, vals1 = item

        vals2 = vals1
        vals3 = vals1

        if typ1 == "category":
            exp_data = Categorical(list(vals1) + list(vals2))
            exp_data3 = Categorical(list(vals1) + list(vals2) + list(vals3))
        else:
            exp_data = vals1 + vals2
            exp_data3 = vals1 + vals2 + vals3

        # ----- Index ----- #

        # index.append
        res = Index(vals1).append(Index(vals2))
        exp = Index(exp_data)
        tm.assert_index_equal(res, exp)

        # 3 elements
        res = Index(vals1).append([Index(vals2), Index(vals3)])
        exp = Index(exp_data3)
        tm.assert_index_equal(res, exp)

        # index.append name mismatch
        i1 = Index(vals1, name="x")
        i2 = Index(vals2, name="y")
        res = i1.append(i2)
        exp = Index(exp_data)
        tm.assert_index_equal(res, exp)

        # index.append name match
        i1 = Index(vals1, name="x")
        i2 = Index(vals2, name="x")
        res = i1.append(i2)
        exp = Index(exp_data, name="x")
        tm.assert_index_equal(res, exp)

        # cannot append non-index
        with pytest.raises(TypeError, match="all inputs must be Index"):
            Index(vals1).append(vals2)

        with pytest.raises(TypeError, match="all inputs must be Index"):
            Index(vals1).append([Index(vals2), vals3])

        # ----- Series ----- #

        # series.append
        res = Series(vals1)._append(Series(vals2), ignore_index=True)
        exp = Series(exp_data)
        tm.assert_series_equal(res, exp, check_index_type=True)

        # concat
        res = pd.concat([Series(vals1), Series(vals2)], ignore_index=True)
        tm.assert_series_equal(res, exp, check_index_type=True)

        # 3 elements
        res = Series(vals1)._append(
            [Series(vals2), Series(vals3)], ignore_index=True)
        exp = Series(exp_data3)
        tm.assert_series_equal(res, exp)

        res = pd.concat(
            [Series(vals1), Series(vals2),
             Series(vals3)],
            ignore_index=True,
        )
        tm.assert_series_equal(res, exp)

        # name mismatch
        s1 = Series(vals1, name="x")
        s2 = Series(vals2, name="y")
        res = s1._append(s2, ignore_index=True)
        exp = Series(exp_data)
        tm.assert_series_equal(res, exp, check_index_type=True)

        res = pd.concat([s1, s2], ignore_index=True)
        tm.assert_series_equal(res, exp, check_index_type=True)

        # name match
        s1 = Series(vals1, name="x")
        s2 = Series(vals2, name="x")
        res = s1._append(s2, ignore_index=True)
        exp = Series(exp_data, name="x")
        tm.assert_series_equal(res, exp, check_index_type=True)

        res = pd.concat([s1, s2], ignore_index=True)
        tm.assert_series_equal(res, exp, check_index_type=True)

        # cannot append non-index
        msg = (r"cannot concatenate object of type '.+'; "
               "only Series and DataFrame objs are valid")
        with pytest.raises(TypeError, match=msg):
            Series(vals1)._append(vals2)

        with pytest.raises(TypeError, match=msg):
            Series(vals1)._append([Series(vals2), vals3])

        with pytest.raises(TypeError, match=msg):
            pd.concat([Series(vals1), vals2])

        with pytest.raises(TypeError, match=msg):
            pd.concat([Series(vals1), Series(vals2), vals3])