5555import pandas.lib as lib
5656
5757from numpy.testing.decorators import slow
58+ from pandas import _np_version_under1p9
5859
59- #---------------------------------------------------------------------
60+ # ---------------------------------------------------------------------
6061# DataFrame test cases
6162
6263JOIN_TYPES = ['inner', 'outer', 'left', 'right']
@@ -5457,10 +5458,10 @@ def test_repr_column_name_unicode_truncation_bug(self):
54575458 def test_head_tail(self):
54585459 assert_frame_equal(self.frame.head(), self.frame[:5])
54595460 assert_frame_equal(self.frame.tail(), self.frame[-5:])
5460-
5461+
54615462 assert_frame_equal(self.frame.head(0), self.frame[0:0])
54625463 assert_frame_equal(self.frame.tail(0), self.frame[0:0])
5463-
5464+
54645465 assert_frame_equal(self.frame.head(-1), self.frame[:-1])
54655466 assert_frame_equal(self.frame.tail(-1), self.frame[1:])
54665467 assert_frame_equal(self.frame.head(1), self.frame[:1])
@@ -13564,10 +13565,11 @@ def test_round_issue(self):
1356413565
1356513566 decimals = pd.Series([1, 0, 2], index=['A', 'B', 'A'])
1356613567 self.assertRaises(ValueError, df.round, decimals)
13567-
13568+
1356813569 def test_built_in_round(self):
1356913570 if not compat.PY3:
13570- raise nose.SkipTest('build in round cannot be overriden prior to Python 3')
13571+ raise nose.SkipTest("build in round cannot be overriden "
13572+ "prior to Python 3")
1357113573
1357213574 # GH11763
1357313575 # Here's the test frame we'll be working with
@@ -13578,7 +13580,7 @@ def test_built_in_round(self):
1357813580 expected_rounded = DataFrame(
1357913581 {'col1': [1., 2., 3.], 'col2': [1., 2., 3.]})
1358013582 tm.assert_frame_equal(round(df), expected_rounded)
13581-
13583+
1358213584 def test_quantile(self):
1358313585 from numpy import percentile
1358413586
@@ -13642,6 +13644,88 @@ def test_quantile_axis_parameter(self):
1364213644 self.assertRaises(ValueError, df.quantile, 0.1, axis=-1)
1364313645 self.assertRaises(ValueError, df.quantile, 0.1, axis="column")
1364413646
13647+ def test_quantile_interpolation(self):
13648+ # GH #10174
13649+ if _np_version_under1p9:
13650+ raise nose.SkipTest("Numpy version under 1.9")
13651+
13652+ from numpy import percentile
13653+
13654+ # interpolation = linear (default case)
13655+ q = self.tsframe.quantile(0.1, axis=0, interpolation='linear')
13656+ self.assertEqual(q['A'], percentile(self.tsframe['A'], 10))
13657+ q = self.intframe.quantile(0.1)
13658+ self.assertEqual(q['A'], percentile(self.intframe['A'], 10))
13659+
13660+ # test with and without interpolation keyword
13661+ q1 = self.intframe.quantile(0.1)
13662+ self.assertEqual(q1['A'], np.percentile(self.intframe['A'], 10))
13663+ assert_series_equal(q, q1)
13664+
13665+ # interpolation method other than default linear
13666+ df = DataFrame({"A": [1, 2, 3], "B": [2, 3, 4]}, index=[1, 2, 3])
13667+ result = df.quantile(.5, axis=1, interpolation='nearest')
13668+ expected = Series([1., 2., 3.], index=[1, 2, 3])
13669+ assert_series_equal(result, expected)
13670+
13671+ # axis
13672+ result = df.quantile([.5, .75], axis=1, interpolation='lower')
13673+ expected = DataFrame({1: [1., 1.], 2: [2., 2.],
13674+ 3: [3., 3.]}, index=[0.5, 0.75])
13675+ assert_frame_equal(result, expected)
13676+
13677+ # test degenerate case
13678+ df = DataFrame({'x': [], 'y': []})
13679+ q = df.quantile(0.1, axis=0, interpolation='higher')
13680+ assert(np.isnan(q['x']) and np.isnan(q['y']))
13681+
13682+ # multi
13683+ df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]],
13684+ columns=['a', 'b', 'c'])
13685+ result = df.quantile([.25, .5], interpolation='midpoint')
13686+ expected = DataFrame([[1.5, 1.5, 1.5], [2.5, 2.5, 2.5]],
13687+ index=[.25, .5], columns=['a', 'b', 'c'])
13688+ assert_frame_equal(result, expected)
13689+
13690+ def test_quantile_interpolation_np_lt_1p9(self):
13691+ # GH #10174
13692+ if not _np_version_under1p9:
13693+ raise nose.SkipTest("Numpy version is greater than 1.9")
13694+
13695+ from numpy import percentile
13696+
13697+ # interpolation = linear (default case)
13698+ q = self.tsframe.quantile(0.1, axis=0, interpolation='linear')
13699+ self.assertEqual(q['A'], percentile(self.tsframe['A'], 10))
13700+ q = self.intframe.quantile(0.1)
13701+ self.assertEqual(q['A'], percentile(self.intframe['A'], 10))
13702+
13703+ # test with and without interpolation keyword
13704+ q1 = self.intframe.quantile(0.1)
13705+ self.assertEqual(q1['A'], np.percentile(self.intframe['A'], 10))
13706+ assert_series_equal(q, q1)
13707+
13708+ # interpolation method other than default linear
13709+ expErrMsg = ("Interpolation methods other than linear"
13710+ " not supported in numpy < 1.9")
13711+ df = DataFrame({"A": [1, 2, 3], "B": [2, 3, 4]}, index=[1, 2, 3])
13712+ with assertRaisesRegexp(ValueError, expErrMsg):
13713+ df.quantile(.5, axis=1, interpolation='nearest')
13714+
13715+ with assertRaisesRegexp(ValueError, expErrMsg):
13716+ df.quantile([.5, .75], axis=1, interpolation='lower')
13717+
13718+ # test degenerate case
13719+ df = DataFrame({'x': [], 'y': []})
13720+ with assertRaisesRegexp(ValueError, expErrMsg):
13721+ q = df.quantile(0.1, axis=0, interpolation='higher')
13722+
13723+ # multi
13724+ df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]],
13725+ columns=['a', 'b', 'c'])
13726+ with assertRaisesRegexp(ValueError, expErrMsg):
13727+ df.quantile([.25, .5], interpolation='midpoint')
13728+
1364513729 def test_quantile_multi(self):
1364613730 df = DataFrame([[1, 1, 1], [2, 2, 2], [3, 3, 3]],
1364713731 columns=['a', 'b', 'c'])
0 commit comments