datetimelike.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. """ generic datetimelike tests """
  2. import numpy as np
  3. import pytest
  4. import pandas as pd
  5. import pandas._testing as tm
  6. from pandas.tests.indexes.common import Base
  7. class DatetimeLike(Base):
  8. def test_isin(self, simple_index):
  9. index = simple_index[:4]
  10. result = index.isin(index)
  11. assert result.all()
  12. result = index.isin(list(index))
  13. assert result.all()
  14. result = index.isin([index[2], 5])
  15. expected = np.array([False, False, True, False])
  16. tm.assert_numpy_array_equal(result, expected)
  17. def test_argsort_matches_array(self, simple_index):
  18. idx = simple_index
  19. idx = idx.insert(1, pd.NaT)
  20. result = idx.argsort()
  21. expected = idx._data.argsort()
  22. tm.assert_numpy_array_equal(result, expected)
  23. def test_can_hold_identifiers(self, simple_index):
  24. idx = simple_index
  25. key = idx[0]
  26. assert idx._can_hold_identifiers_and_holds_name(key) is False
  27. def test_shift_identity(self, simple_index):
  28. idx = simple_index
  29. tm.assert_index_equal(idx, idx.shift(0))
  30. def test_shift_empty(self, simple_index):
  31. # GH#14811
  32. idx = simple_index[:0]
  33. tm.assert_index_equal(idx, idx.shift(1))
  34. def test_str(self, simple_index):
  35. # test the string repr
  36. idx = simple_index
  37. idx.name = "foo"
  38. assert f"length={len(idx)}" not in str(idx)
  39. assert "'foo'" in str(idx)
  40. assert type(idx).__name__ in str(idx)
  41. if hasattr(idx, "tz"):
  42. if idx.tz is not None:
  43. assert idx.tz in str(idx)
  44. if isinstance(idx, pd.PeriodIndex):
  45. assert f"dtype='period[{idx.freqstr}]'" in str(idx)
  46. else:
  47. assert f"freq='{idx.freqstr}'" in str(idx)
  48. def test_view(self, simple_index):
  49. idx = simple_index
  50. idx_view = idx.view("i8")
  51. result = self._index_cls(idx)
  52. tm.assert_index_equal(result, idx)
  53. idx_view = idx.view(self._index_cls)
  54. result = self._index_cls(idx)
  55. tm.assert_index_equal(result, idx_view)
  56. def test_map_callable(self, simple_index):
  57. index = simple_index
  58. expected = index + index.freq
  59. result = index.map(lambda x: x + x.freq)
  60. tm.assert_index_equal(result, expected)
  61. # map to NaT
  62. result = index.map(lambda x: pd.NaT if x == index[0] else x)
  63. expected = pd.Index([pd.NaT] + index[1:].tolist())
  64. tm.assert_index_equal(result, expected)
  65. @pytest.mark.parametrize(
  66. "mapper",
  67. [
  68. lambda values, index: {i: e for e, i in zip(values, index)},
  69. lambda values, index: pd.Series(values, index, dtype=object),
  70. ],
  71. )
  72. def test_map_dictlike(self, mapper, simple_index):
  73. index = simple_index
  74. expected = index + index.freq
  75. # don't compare the freqs
  76. if isinstance(expected, (pd.DatetimeIndex, pd.TimedeltaIndex)):
  77. expected = expected._with_freq(None)
  78. result = index.map(mapper(expected, index))
  79. tm.assert_index_equal(result, expected)
  80. expected = pd.Index([pd.NaT] + index[1:].tolist())
  81. result = index.map(mapper(expected, index))
  82. tm.assert_index_equal(result, expected)
  83. # empty map; these map to np.nan because we cannot know
  84. # to re-infer things
  85. expected = pd.Index([np.nan] * len(index))
  86. result = index.map(mapper([], []))
  87. tm.assert_index_equal(result, expected)
  88. def test_getitem_preserves_freq(self, simple_index):
  89. index = simple_index
  90. assert index.freq is not None
  91. result = index[:]
  92. assert result.freq == index.freq
  93. def test_where_cast_str(self, simple_index):
  94. index = simple_index
  95. mask = np.ones(len(index), dtype=bool)
  96. mask[-1] = False
  97. result = index.where(mask, str(index[0]))
  98. expected = index.where(mask, index[0])
  99. tm.assert_index_equal(result, expected)
  100. result = index.where(mask, [str(index[0])])
  101. tm.assert_index_equal(result, expected)
  102. expected = index.astype(object).where(mask, "foo")
  103. result = index.where(mask, "foo")
  104. tm.assert_index_equal(result, expected)
  105. result = index.where(mask, ["foo"])
  106. tm.assert_index_equal(result, expected)