test_unique.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from datetime import (
  2. datetime,
  3. timedelta,
  4. )
  5. from pandas import (
  6. DatetimeIndex,
  7. NaT,
  8. Timestamp,
  9. )
  10. import pandas._testing as tm
  11. def test_unique(tz_naive_fixture):
  12. idx = DatetimeIndex(["2017"] * 2, tz=tz_naive_fixture)
  13. expected = idx[:1]
  14. result = idx.unique()
  15. tm.assert_index_equal(result, expected)
  16. # GH#21737
  17. # Ensure the underlying data is consistent
  18. assert result[0] == expected[0]
  19. def test_index_unique(rand_series_with_duplicate_datetimeindex):
  20. dups = rand_series_with_duplicate_datetimeindex
  21. index = dups.index
  22. uniques = index.unique()
  23. expected = DatetimeIndex(
  24. [
  25. datetime(2000, 1, 2),
  26. datetime(2000, 1, 3),
  27. datetime(2000, 1, 4),
  28. datetime(2000, 1, 5),
  29. ]
  30. )
  31. assert uniques.dtype == "M8[ns]" # sanity
  32. tm.assert_index_equal(uniques, expected)
  33. assert index.nunique() == 4
  34. # GH#2563
  35. assert isinstance(uniques, DatetimeIndex)
  36. dups_local = index.tz_localize("US/Eastern")
  37. dups_local.name = "foo"
  38. result = dups_local.unique()
  39. expected = DatetimeIndex(expected, name="foo")
  40. expected = expected.tz_localize("US/Eastern")
  41. assert result.tz is not None
  42. assert result.name == "foo"
  43. tm.assert_index_equal(result, expected)
  44. def test_index_unique2():
  45. # NaT, note this is excluded
  46. arr = [1370745748 + t for t in range(20)] + [NaT._value]
  47. idx = DatetimeIndex(arr * 3)
  48. tm.assert_index_equal(idx.unique(), DatetimeIndex(arr))
  49. assert idx.nunique() == 20
  50. assert idx.nunique(dropna=False) == 21
  51. def test_index_unique3():
  52. arr = [
  53. Timestamp("2013-06-09 02:42:28") + timedelta(seconds=t) for t in range(20)
  54. ] + [NaT]
  55. idx = DatetimeIndex(arr * 3)
  56. tm.assert_index_equal(idx.unique(), DatetimeIndex(arr))
  57. assert idx.nunique() == 20
  58. assert idx.nunique(dropna=False) == 21
  59. def test_is_unique_monotonic(rand_series_with_duplicate_datetimeindex):
  60. index = rand_series_with_duplicate_datetimeindex.index
  61. assert not index.is_unique