test_contains.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. import pytest
  4. from pandas.compat import PYPY
  5. import pandas as pd
  6. from pandas import MultiIndex
  7. import pandas.util.testing as tm
  8. def test_contains_top_level():
  9. midx = MultiIndex.from_product([['A', 'B'], [1, 2]])
  10. assert 'A' in midx
  11. assert 'A' not in midx._engine
  12. def test_contains_with_nat():
  13. # MI with a NaT
  14. mi = MultiIndex(levels=[['C'],
  15. pd.date_range('2012-01-01', periods=5)],
  16. codes=[[0, 0, 0, 0, 0, 0], [-1, 0, 1, 2, 3, 4]],
  17. names=[None, 'B'])
  18. assert ('C', pd.Timestamp('2012-01-01')) in mi
  19. for val in mi.values:
  20. assert val in mi
  21. def test_contains(idx):
  22. assert ('foo', 'two') in idx
  23. assert ('bar', 'two') not in idx
  24. assert None not in idx
  25. @pytest.mark.skipif(not PYPY, reason="tuples cmp recursively on PyPy")
  26. def test_isin_nan_pypy():
  27. idx = MultiIndex.from_arrays([['foo', 'bar'], [1.0, np.nan]])
  28. tm.assert_numpy_array_equal(idx.isin([('bar', np.nan)]),
  29. np.array([False, True]))
  30. tm.assert_numpy_array_equal(idx.isin([('bar', float('nan'))]),
  31. np.array([False, True]))
  32. def test_isin():
  33. values = [('foo', 2), ('bar', 3), ('quux', 4)]
  34. idx = MultiIndex.from_arrays([
  35. ['qux', 'baz', 'foo', 'bar'],
  36. np.arange(4)
  37. ])
  38. result = idx.isin(values)
  39. expected = np.array([False, False, True, True])
  40. tm.assert_numpy_array_equal(result, expected)
  41. # empty, return dtype bool
  42. idx = MultiIndex.from_arrays([[], []])
  43. result = idx.isin(values)
  44. assert len(result) == 0
  45. assert result.dtype == np.bool_
  46. @pytest.mark.skipif(PYPY, reason="tuples cmp recursively on PyPy")
  47. def test_isin_nan_not_pypy():
  48. idx = MultiIndex.from_arrays([['foo', 'bar'], [1.0, np.nan]])
  49. tm.assert_numpy_array_equal(idx.isin([('bar', np.nan)]),
  50. np.array([False, False]))
  51. tm.assert_numpy_array_equal(idx.isin([('bar', float('nan'))]),
  52. np.array([False, False]))
  53. def test_isin_level_kwarg():
  54. idx = MultiIndex.from_arrays([['qux', 'baz', 'foo', 'bar'], np.arange(
  55. 4)])
  56. vals_0 = ['foo', 'bar', 'quux']
  57. vals_1 = [2, 3, 10]
  58. expected = np.array([False, False, True, True])
  59. tm.assert_numpy_array_equal(expected, idx.isin(vals_0, level=0))
  60. tm.assert_numpy_array_equal(expected, idx.isin(vals_0, level=-2))
  61. tm.assert_numpy_array_equal(expected, idx.isin(vals_1, level=1))
  62. tm.assert_numpy_array_equal(expected, idx.isin(vals_1, level=-1))
  63. pytest.raises(IndexError, idx.isin, vals_0, level=5)
  64. pytest.raises(IndexError, idx.isin, vals_0, level=-5)
  65. pytest.raises(KeyError, idx.isin, vals_0, level=1.0)
  66. pytest.raises(KeyError, idx.isin, vals_1, level=-1.0)
  67. pytest.raises(KeyError, idx.isin, vals_1, level='A')
  68. idx.names = ['A', 'B']
  69. tm.assert_numpy_array_equal(expected, idx.isin(vals_0, level='A'))
  70. tm.assert_numpy_array_equal(expected, idx.isin(vals_1, level='B'))
  71. pytest.raises(KeyError, idx.isin, vals_1, level='C')