Skip to content

Commit 2c5bc35

Browse files
committed
added duplicates='raise' test. other fixes to qcut for duplicates='raise'
1 parent 3dbc416 commit 2c5bc35

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

pandas/tools/tests/test_tile.py

+5
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,11 @@ def test_qcut_duplicates_drop(self):
279279
ex_levels = ['[0, 1]', '(1, 3]']
280280
self.assertTrue((cats.categories == ex_levels).all())
281281

282+
def test_qcut_duplicates_raise(self):
283+
# GH 7751
284+
values = [0, 0, 0, 0, 1, 2, 3]
285+
self.assertRaises(ValueError, qcut, values, 3, duplicates='raise')
286+
282287
def test_single_bin(self):
283288
# issue 14652
284289
expected = Series([0, 0])

pandas/tools/tile.py

+5-8
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise'):
152152
precision : int
153153
The precision at which to store and display the bins labels
154154
duplicates : {'raise', 'drop'}, optional
155-
If binned edges are not unique, raise ValueError or drop non-uniques.
155+
If bin edges are not unique, raise ValueError or drop non-uniques.
156156
.. versionadded:: 0.20.0
157157
158158
Returns
@@ -202,23 +202,20 @@ def _bins_to_cuts(x, bins, right=True, labels=None,
202202

203203
if duplicates not in ['raise', 'drop']:
204204
raise ValueError("invalid value for 'duplicates' parameter, "
205-
+ "valid options are: raise, drop")
205+
"valid options are: raise, drop")
206206

207207
unique_bins = algos.unique(bins)
208208
if len(unique_bins) < len(bins):
209209
if duplicates == 'raise':
210-
raise ValueError('Bin edges must be unique: %s' % repr(bins) +
211-
' You can drop duplicate edges ' +
212-
'by setting \'duplicates\' param')
210+
raise ValueError("Bin edges must be unique: {} "
211+
"You can drop duplicate edges "
212+
"by setting 'duplicates' param".format(repr(bins)))
213213
else:
214214
bins = unique_bins
215215

216216
side = 'left' if right else 'right'
217217
ids = bins.searchsorted(x, side=side)
218218

219-
if len(algos.unique(bins)) < len(bins):
220-
raise ValueError('Bin edges must be unique: %s' % repr(bins))
221-
222219
if include_lowest:
223220
ids[x == bins[0]] = 1
224221

0 commit comments

Comments
 (0)