test_unique.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import numpy as np
  2. from pandas import (
  3. Categorical,
  4. IntervalIndex,
  5. Series,
  6. date_range,
  7. )
  8. import pandas._testing as tm
  9. class TestUnique:
  10. def test_unique_uint64(self):
  11. ser = Series([1, 2, 2**63, 2**63], dtype=np.uint64)
  12. res = ser.unique()
  13. exp = np.array([1, 2, 2**63], dtype=np.uint64)
  14. tm.assert_numpy_array_equal(res, exp)
  15. def test_unique_data_ownership(self):
  16. # it works! GH#1807
  17. Series(Series(["a", "c", "b"]).unique()).sort_values()
  18. def test_unique(self):
  19. # GH#714 also, dtype=float
  20. ser = Series([1.2345] * 100)
  21. ser[::2] = np.nan
  22. result = ser.unique()
  23. assert len(result) == 2
  24. # explicit f4 dtype
  25. ser = Series([1.2345] * 100, dtype="f4")
  26. ser[::2] = np.nan
  27. result = ser.unique()
  28. assert len(result) == 2
  29. def test_unique_nan_object_dtype(self):
  30. # NAs in object arrays GH#714
  31. ser = Series(["foo"] * 100, dtype="O")
  32. ser[::2] = np.nan
  33. result = ser.unique()
  34. assert len(result) == 2
  35. def test_unique_none(self):
  36. # decision about None
  37. ser = Series([1, 2, 3, None, None, None], dtype=object)
  38. result = ser.unique()
  39. expected = np.array([1, 2, 3, None], dtype=object)
  40. tm.assert_numpy_array_equal(result, expected)
  41. def test_unique_categorical(self):
  42. # GH#18051
  43. cat = Categorical([])
  44. ser = Series(cat)
  45. result = ser.unique()
  46. tm.assert_categorical_equal(result, cat)
  47. cat = Categorical([np.nan])
  48. ser = Series(cat)
  49. result = ser.unique()
  50. tm.assert_categorical_equal(result, cat)
  51. def test_tz_unique(self):
  52. # GH 46128
  53. dti1 = date_range("2016-01-01", periods=3)
  54. ii1 = IntervalIndex.from_breaks(dti1)
  55. ser1 = Series(ii1)
  56. uni1 = ser1.unique()
  57. tm.assert_interval_array_equal(ser1.array, uni1)
  58. dti2 = date_range("2016-01-01", periods=3, tz="US/Eastern")
  59. ii2 = IntervalIndex.from_breaks(dti2)
  60. ser2 = Series(ii2)
  61. uni2 = ser2.unique()
  62. tm.assert_interval_array_equal(ser2.array, uni2)
  63. assert uni1.dtype != uni2.dtype