test_between.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import numpy as np
  2. import pytest
  3. from pandas import (
  4. Series,
  5. bdate_range,
  6. date_range,
  7. period_range,
  8. )
  9. import pandas._testing as tm
  10. class TestBetween:
  11. def test_between(self):
  12. series = Series(date_range("1/1/2000", periods=10))
  13. left, right = series[[2, 7]]
  14. result = series.between(left, right)
  15. expected = (series >= left) & (series <= right)
  16. tm.assert_series_equal(result, expected)
  17. def test_between_datetime_object_dtype(self):
  18. ser = Series(bdate_range("1/1/2000", periods=20).astype(object))
  19. ser[::2] = np.nan
  20. result = ser[ser.between(ser[3], ser[17])]
  21. expected = ser[3:18].dropna()
  22. tm.assert_series_equal(result, expected)
  23. result = ser[ser.between(ser[3], ser[17], inclusive="neither")]
  24. expected = ser[5:16].dropna()
  25. tm.assert_series_equal(result, expected)
  26. def test_between_period_values(self):
  27. ser = Series(period_range("2000-01-01", periods=10, freq="D"))
  28. left, right = ser[[2, 7]]
  29. result = ser.between(left, right)
  30. expected = (ser >= left) & (ser <= right)
  31. tm.assert_series_equal(result, expected)
  32. def test_between_inclusive_string(self):
  33. # GH 40628
  34. series = Series(date_range("1/1/2000", periods=10))
  35. left, right = series[[2, 7]]
  36. result = series.between(left, right, inclusive="both")
  37. expected = (series >= left) & (series <= right)
  38. tm.assert_series_equal(result, expected)
  39. result = series.between(left, right, inclusive="left")
  40. expected = (series >= left) & (series < right)
  41. tm.assert_series_equal(result, expected)
  42. result = series.between(left, right, inclusive="right")
  43. expected = (series > left) & (series <= right)
  44. tm.assert_series_equal(result, expected)
  45. result = series.between(left, right, inclusive="neither")
  46. expected = (series > left) & (series < right)
  47. tm.assert_series_equal(result, expected)
  48. @pytest.mark.parametrize("inclusive", ["yes", True, False])
  49. def test_between_error_args(self, inclusive):
  50. # GH 40628
  51. series = Series(date_range("1/1/2000", periods=10))
  52. left, right = series[[2, 7]]
  53. value_error_msg = (
  54. "Inclusive has to be either string of 'both',"
  55. "'left', 'right', or 'neither'."
  56. )
  57. with pytest.raises(ValueError, match=value_error_msg):
  58. series = Series(date_range("1/1/2000", periods=10))
  59. series.between(left, right, inclusive=inclusive)