test_mask.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import numpy as np
  2. import pytest
  3. from pandas import Series
  4. import pandas._testing as tm
  5. def test_mask():
  6. # compare with tested results in test_where
  7. s = Series(np.random.randn(5))
  8. cond = s > 0
  9. rs = s.where(~cond, np.nan)
  10. tm.assert_series_equal(rs, s.mask(cond))
  11. rs = s.where(~cond)
  12. rs2 = s.mask(cond)
  13. tm.assert_series_equal(rs, rs2)
  14. rs = s.where(~cond, -s)
  15. rs2 = s.mask(cond, -s)
  16. tm.assert_series_equal(rs, rs2)
  17. cond = Series([True, False, False, True, False], index=s.index)
  18. s2 = -(s.abs())
  19. rs = s2.where(~cond[:3])
  20. rs2 = s2.mask(cond[:3])
  21. tm.assert_series_equal(rs, rs2)
  22. rs = s2.where(~cond[:3], -s2)
  23. rs2 = s2.mask(cond[:3], -s2)
  24. tm.assert_series_equal(rs, rs2)
  25. msg = "Array conditional must be same shape as self"
  26. with pytest.raises(ValueError, match=msg):
  27. s.mask(1)
  28. with pytest.raises(ValueError, match=msg):
  29. s.mask(cond[:3].values, -s)
  30. def test_mask_casts():
  31. # dtype changes
  32. ser = Series([1, 2, 3, 4])
  33. result = ser.mask(ser > 2, np.nan)
  34. expected = Series([1, 2, np.nan, np.nan])
  35. tm.assert_series_equal(result, expected)
  36. def test_mask_casts2():
  37. # see gh-21891
  38. ser = Series([1, 2])
  39. res = ser.mask([True, False])
  40. exp = Series([np.nan, 2])
  41. tm.assert_series_equal(res, exp)
  42. def test_mask_inplace():
  43. s = Series(np.random.randn(5))
  44. cond = s > 0
  45. rs = s.copy()
  46. rs.mask(cond, inplace=True)
  47. tm.assert_series_equal(rs.dropna(), s[~cond])
  48. tm.assert_series_equal(rs, s.mask(cond))
  49. rs = s.copy()
  50. rs.mask(cond, -s, inplace=True)
  51. tm.assert_series_equal(rs, s.mask(cond, -s))