Skip to content

Commit 8f32f1c

Browse files
committed
BUG: handle incomparable values when creating Factor, caused bug in py3
1 parent 3bb65a8 commit 8f32f1c

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

pandas/core/index.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1002,11 +1002,14 @@ def unique_with_labels(values):
10021002
labels, _ = rizer.factorize(values, sort=False)
10031003
uniques = Index(rizer.uniques)
10041004

1005-
sorter = uniques.argsort()
1006-
reverse_indexer = np.empty(len(sorter), dtype='i4')
1007-
reverse_indexer.put(sorter, np.arange(len(sorter)))
1008-
labels = reverse_indexer.take(labels)
1009-
uniques = uniques.take(sorter)
1005+
try:
1006+
sorter = uniques.argsort()
1007+
reverse_indexer = np.empty(len(sorter), dtype='i4')
1008+
reverse_indexer.put(sorter, np.arange(len(sorter)))
1009+
labels = reverse_indexer.take(labels)
1010+
uniques = uniques.take(sorter)
1011+
except TypeError:
1012+
pass
10101013

10111014
return uniques, labels
10121015

pandas/tests/test_index.py

+6
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,12 @@ def test_getitem(self):
13491349
subf = self.factor[self.factor.asarray() == 'c']
13501350
tm.assert_almost_equal(subf.labels, [2, 2, 2])
13511351

1352+
def test_constructor_unsortable(self):
1353+
arr = np.array([1, 2, 3, datetime.now()], dtype='O')
1354+
1355+
# it works!
1356+
factor = Factor(arr)
1357+
13521358
def test_factor_agg(self):
13531359
import pandas.core.frame as frame
13541360

0 commit comments

Comments
 (0)