Skip to content

Commit 110be6f

Browse files
committed
BUG: don't nuke None in Series.unique, GH #778
1 parent 039d2a7 commit 110be6f

File tree

5 files changed

+12
-3
lines changed

5 files changed

+12
-3
lines changed

pandas/core/nanops.py

-1
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,5 @@ def unique1d(values):
366366
values = values.astype(np.object_)
367367
table = lib.PyObjectHashTable(len(values))
368368
uniques = lib.list_to_object_array(table.unique(values))
369-
uniques = lib.maybe_convert_objects(uniques)
370369
return uniques
371370

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
_np_version = np.version.short_version
3636
_np_version_under1p6 = LooseVersion(_np_version) < '1.6'
3737

38-
#-------------------------------------------------------------------------------
38+
#----------------------------------------------------------------------
3939
# Wrapper function for Series arithmetic methods
4040

4141
def _arith_method(op, name):

pandas/src/hashtable.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ cdef class PyObjectHashTable:
794794
for i in range(n):
795795
val = values[i]
796796

797-
if not _checknull(val):
797+
if not _checknan(val):
798798
k = kh_get_pymap(self.table, <PyObject*>val)
799799
if k == self.table.n_buckets:
800800
k = kh_put_pymap(self.table, <PyObject*>val, &ret)

pandas/src/tseries.pyx

+3
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ cdef double NEGINF = -INF
221221
cdef inline _checknull(object val):
222222
return not np.PyArray_Check(val) and (val is None or val != val)
223223

224+
cdef inline _checknan(object val):
225+
return not np.PyArray_Check(val) and val != val
226+
224227
cpdef checknull(object val):
225228
if util.is_float_object(val):
226229
return val != val or val == INF or val == NEGINF

pandas/tests/test_series.py

+7
Original file line numberDiff line numberDiff line change
@@ -1427,6 +1427,13 @@ def test_unique(self):
14271427
expected = np.unique(strings)
14281428
self.assert_(np.array_equal(result, expected))
14291429

1430+
# decision about None
1431+
1432+
s = Series([1, 2, 3, None, None, None], dtype=object)
1433+
result = s.unique()
1434+
expected = np.array([1, 2, 3, None], dtype=object)
1435+
self.assert_(np.array_equal(result, expected))
1436+
14301437
def test_sort(self):
14311438
ts = self.ts.copy()
14321439
ts.sort()

0 commit comments

Comments
 (0)