test_join.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import numpy as np
  2. import pytest
  3. from pandas._libs.tslibs import IncompatibleFrequency
  4. from pandas import (
  5. Index,
  6. PeriodIndex,
  7. period_range,
  8. )
  9. import pandas._testing as tm
  10. class TestJoin:
  11. def test_join_outer_indexer(self):
  12. pi = period_range("1/1/2000", "1/20/2000", freq="D")
  13. result = pi._outer_indexer(pi)
  14. tm.assert_extension_array_equal(result[0], pi._values)
  15. tm.assert_numpy_array_equal(result[1], np.arange(len(pi), dtype=np.intp))
  16. tm.assert_numpy_array_equal(result[2], np.arange(len(pi), dtype=np.intp))
  17. def test_joins(self, join_type):
  18. index = period_range("1/1/2000", "1/20/2000", freq="D")
  19. joined = index.join(index[:-5], how=join_type)
  20. assert isinstance(joined, PeriodIndex)
  21. assert joined.freq == index.freq
  22. def test_join_self(self, join_type):
  23. index = period_range("1/1/2000", "1/20/2000", freq="D")
  24. res = index.join(index, how=join_type)
  25. assert index is res
  26. def test_join_does_not_recur(self):
  27. df = tm.makeCustomDataframe(
  28. 3,
  29. 2,
  30. data_gen_f=lambda *args: np.random.randint(2),
  31. c_idx_type="p",
  32. r_idx_type="dt",
  33. )
  34. ser = df.iloc[:2, 0]
  35. res = ser.index.join(df.columns, how="outer")
  36. expected = Index(
  37. [ser.index[0], ser.index[1], df.columns[0], df.columns[1]], object
  38. )
  39. tm.assert_index_equal(res, expected)
  40. def test_join_mismatched_freq_raises(self):
  41. index = period_range("1/1/2000", "1/20/2000", freq="D")
  42. index3 = period_range("1/1/2000", "1/20/2000", freq="2D")
  43. msg = r".*Input has different freq=2D from Period\(freq=D\)"
  44. with pytest.raises(IncompatibleFrequency, match=msg):
  45. index.join(index3)