From 9ded43bdf4bd0b6688606eec6e535560abb4b269 Mon Sep 17 00:00:00 2001 From: Guillaume Thomas Date: Tue, 27 Jan 2015 22:34:33 +0100 Subject: [PATCH 1/3] Use unique for nunique method --- pandas/core/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pandas/core/base.py b/pandas/core/base.py index f648af85b68c5..88c3a51d824ec 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -440,7 +440,9 @@ def nunique(self, dropna=True): ------- nunique : int """ - return len(self.value_counts(dropna=dropna)) + if dropna: + return len(set(self.unique()) - {None}) + return len(self.unique()) def factorize(self, sort=False, na_sentinel=-1): """ From f934481646f6cbea319d6eb2a975046f819d9d73 Mon Sep 17 00:00:00 2001 From: Guillaume Thomas Date: Tue, 27 Jan 2015 22:34:33 +0100 Subject: [PATCH 2/3] PERF: Use unique for nunique method Fixes GH9354 --- pandas/core/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pandas/core/base.py b/pandas/core/base.py index f648af85b68c5..88c3a51d824ec 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -440,7 +440,9 @@ def nunique(self, dropna=True): ------- nunique : int """ - return len(self.value_counts(dropna=dropna)) + if dropna: + return len(set(self.unique()) - {None}) + return len(self.unique()) def factorize(self, sort=False, na_sentinel=-1): """ From 1c0d703283552a9a1dadd78074afcdf08ef3adf7 Mon Sep 17 00:00:00 2001 From: Guillaume Thomas Date: Wed, 28 Jan 2015 07:03:35 +0100 Subject: [PATCH 3/3] BUG: Handling neatly Nan in Series.nunique(GH9354) --- pandas/core/base.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/core/base.py b/pandas/core/base.py index 88c3a51d824ec..1ad5acd9f136c 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -440,9 +440,10 @@ def nunique(self, dropna=True): ------- nunique : int """ + result = self.unique() if dropna: - return len(set(self.unique()) - {None}) - return len(self.unique()) + return len(result) - np.isnan(np.sum(result)) + return len(result) def factorize(self, sort=False, na_sentinel=-1): """