123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- """ generic datetimelike tests """
- import numpy as np
- import pytest
- import pandas as pd
- import pandas._testing as tm
- from pandas.tests.indexes.common import Base
- class DatetimeLike(Base):
- def test_isin(self, simple_index):
- index = simple_index[:4]
- result = index.isin(index)
- assert result.all()
- result = index.isin(list(index))
- assert result.all()
- result = index.isin([index[2], 5])
- expected = np.array([False, False, True, False])
- tm.assert_numpy_array_equal(result, expected)
- def test_argsort_matches_array(self, simple_index):
- idx = simple_index
- idx = idx.insert(1, pd.NaT)
- result = idx.argsort()
- expected = idx._data.argsort()
- tm.assert_numpy_array_equal(result, expected)
- def test_can_hold_identifiers(self, simple_index):
- idx = simple_index
- key = idx[0]
- assert idx._can_hold_identifiers_and_holds_name(key) is False
- def test_shift_identity(self, simple_index):
- idx = simple_index
- tm.assert_index_equal(idx, idx.shift(0))
- def test_shift_empty(self, simple_index):
- # GH#14811
- idx = simple_index[:0]
- tm.assert_index_equal(idx, idx.shift(1))
- def test_str(self, simple_index):
- # test the string repr
- idx = simple_index
- idx.name = "foo"
- assert f"length={len(idx)}" not in str(idx)
- assert "'foo'" in str(idx)
- assert type(idx).__name__ in str(idx)
- if hasattr(idx, "tz"):
- if idx.tz is not None:
- assert idx.tz in str(idx)
- if isinstance(idx, pd.PeriodIndex):
- assert f"dtype='period[{idx.freqstr}]'" in str(idx)
- else:
- assert f"freq='{idx.freqstr}'" in str(idx)
- def test_view(self, simple_index):
- idx = simple_index
- idx_view = idx.view("i8")
- result = self._index_cls(idx)
- tm.assert_index_equal(result, idx)
- idx_view = idx.view(self._index_cls)
- result = self._index_cls(idx)
- tm.assert_index_equal(result, idx_view)
- def test_map_callable(self, simple_index):
- index = simple_index
- expected = index + index.freq
- result = index.map(lambda x: x + x.freq)
- tm.assert_index_equal(result, expected)
- # map to NaT
- result = index.map(lambda x: pd.NaT if x == index[0] else x)
- expected = pd.Index([pd.NaT] + index[1:].tolist())
- tm.assert_index_equal(result, expected)
- @pytest.mark.parametrize(
- "mapper",
- [
- lambda values, index: {i: e for e, i in zip(values, index)},
- lambda values, index: pd.Series(values, index, dtype=object),
- ],
- )
- def test_map_dictlike(self, mapper, simple_index):
- index = simple_index
- expected = index + index.freq
- # don't compare the freqs
- if isinstance(expected, (pd.DatetimeIndex, pd.TimedeltaIndex)):
- expected = expected._with_freq(None)
- result = index.map(mapper(expected, index))
- tm.assert_index_equal(result, expected)
- expected = pd.Index([pd.NaT] + index[1:].tolist())
- result = index.map(mapper(expected, index))
- tm.assert_index_equal(result, expected)
- # empty map; these map to np.nan because we cannot know
- # to re-infer things
- expected = pd.Index([np.nan] * len(index))
- result = index.map(mapper([], []))
- tm.assert_index_equal(result, expected)
- def test_getitem_preserves_freq(self, simple_index):
- index = simple_index
- assert index.freq is not None
- result = index[:]
- assert result.freq == index.freq
- def test_where_cast_str(self, simple_index):
- index = simple_index
- mask = np.ones(len(index), dtype=bool)
- mask[-1] = False
- result = index.where(mask, str(index[0]))
- expected = index.where(mask, index[0])
- tm.assert_index_equal(result, expected)
- result = index.where(mask, [str(index[0])])
- tm.assert_index_equal(result, expected)
- expected = index.astype(object).where(mask, "foo")
- result = index.where(mask, "foo")
- tm.assert_index_equal(result, expected)
- result = index.where(mask, ["foo"])
- tm.assert_index_equal(result, expected)
|