PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/pandas/tools/tests/test_merge_ordered.py

http://github.com/wesm/pandas
Python | 98 lines | 69 code | 25 blank | 4 comment | 3 complexity | 6aca4d8b43f2d4c741d3e3b44242234b MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
  1. import nose
  2. import pandas as pd
  3. from pandas import DataFrame, merge_ordered
  4. from pandas.util import testing as tm
  5. from pandas.util.testing import assert_frame_equal
  6. from numpy import nan
  7. class TestOrderedMerge(tm.TestCase):
  8. def setUp(self):
  9. self.left = DataFrame({'key': ['a', 'c', 'e'],
  10. 'lvalue': [1, 2., 3]})
  11. self.right = DataFrame({'key': ['b', 'c', 'd', 'f'],
  12. 'rvalue': [1, 2, 3., 4]})
  13. def test_deprecation(self):
  14. with tm.assert_produces_warning(FutureWarning):
  15. pd.ordered_merge(self.left, self.right, on='key')
  16. # GH #813
  17. def test_basic(self):
  18. result = merge_ordered(self.left, self.right, on='key')
  19. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'],
  20. 'lvalue': [1, nan, 2, nan, 3, nan],
  21. 'rvalue': [nan, 1, 2, 3, nan, 4]})
  22. assert_frame_equal(result, expected)
  23. def test_ffill(self):
  24. result = merge_ordered(
  25. self.left, self.right, on='key', fill_method='ffill')
  26. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'],
  27. 'lvalue': [1., 1, 2, 2, 3, 3.],
  28. 'rvalue': [nan, 1, 2, 3, 3, 4]})
  29. assert_frame_equal(result, expected)
  30. def test_multigroup(self):
  31. left = pd.concat([self.left, self.left], ignore_index=True)
  32. # right = concat([self.right, self.right], ignore_index=True)
  33. left['group'] = ['a'] * 3 + ['b'] * 3
  34. # right['group'] = ['a'] * 4 + ['b'] * 4
  35. result = merge_ordered(left, self.right, on='key', left_by='group',
  36. fill_method='ffill')
  37. expected = DataFrame({'key': ['a', 'b', 'c', 'd', 'e', 'f'] * 2,
  38. 'lvalue': [1., 1, 2, 2, 3, 3.] * 2,
  39. 'rvalue': [nan, 1, 2, 3, 3, 4] * 2})
  40. expected['group'] = ['a'] * 6 + ['b'] * 6
  41. assert_frame_equal(result, expected.ix[:, result.columns])
  42. result2 = merge_ordered(self.right, left, on='key', right_by='group',
  43. fill_method='ffill')
  44. assert_frame_equal(result, result2.ix[:, result.columns])
  45. result = merge_ordered(left, self.right, on='key', left_by='group')
  46. self.assertTrue(result['group'].notnull().all())
  47. def test_merge_type(self):
  48. class NotADataFrame(DataFrame):
  49. @property
  50. def _constructor(self):
  51. return NotADataFrame
  52. nad = NotADataFrame(self.left)
  53. result = nad.merge(self.right, on='key')
  54. tm.assertIsInstance(result, NotADataFrame)
  55. def test_empty_sequence_concat(self):
  56. # GH 9157
  57. empty_pat = "[Nn]o objects"
  58. none_pat = "objects.*None"
  59. test_cases = [
  60. ((), empty_pat),
  61. ([], empty_pat),
  62. ({}, empty_pat),
  63. ([None], none_pat),
  64. ([None, None], none_pat)
  65. ]
  66. for df_seq, pattern in test_cases:
  67. tm.assertRaisesRegexp(ValueError, pattern, pd.concat, df_seq)
  68. pd.concat([pd.DataFrame()])
  69. pd.concat([None, pd.DataFrame()])
  70. pd.concat([pd.DataFrame(), None])
  71. if __name__ == '__main__':
  72. nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],
  73. exit=False)