@@ -250,11 +250,13 @@ def test_value_counts_unique_nunique(self):
250
250
expected_s = Series (range (10 , 0 , - 1 ), index = values [::- 1 ], dtype = 'int64' )
251
251
tm .assert_series_equal (o .value_counts (), expected_s )
252
252
253
- if isinstance (o , DatetimeIndex ):
254
- # DatetimeIndex.unique returns DatetimeIndex
255
- self .assertTrue (o .unique ().equals (klass (values )))
256
- else :
257
- self .assert_numpy_array_equal (o .unique (), values )
253
+ result = o .unique ()
254
+ if isinstance (o , (DatetimeIndex , PeriodIndex )):
255
+ self .assertTrue (isinstance (result , o .__class__ ))
256
+ self .assertEqual (result .name , o .name )
257
+ self .assertEqual (result .freq , o .freq )
258
+
259
+ self .assert_numpy_array_equal (result , values )
258
260
259
261
self .assertEqual (o .nunique (), len (np .unique (o .values )))
260
262
@@ -263,17 +265,13 @@ def test_value_counts_unique_nunique(self):
263
265
klass = type (o )
264
266
values = o .values
265
267
266
- if o .values .dtype == 'int64' :
267
- # skips int64 because it doesn't allow to include nan or None
268
- continue
269
-
270
268
if ((isinstance (o , Int64Index ) and not isinstance (o ,
271
269
(DatetimeIndex , PeriodIndex )))):
272
270
# skips int64 because it doesn't allow to include nan or None
273
271
continue
274
272
275
273
# special assign to the numpy array
276
- if o .values .dtype == 'datetime64[ns]' :
274
+ if o .values .dtype == 'datetime64[ns]' or isinstance ( o , PeriodIndex ) :
277
275
values [0 :2 ] = pd .tslib .iNaT
278
276
else :
279
277
values [0 :2 ] = null_obj
@@ -294,8 +292,8 @@ def test_value_counts_unique_nunique(self):
294
292
result = o .unique ()
295
293
self .assert_numpy_array_equal (result [1 :], values [2 :])
296
294
297
- if isinstance (o , DatetimeIndex ):
298
- self .assertTrue (result [0 ] is pd .NaT )
295
+ if isinstance (o , ( DatetimeIndex , PeriodIndex ) ):
296
+ self .assertTrue (result . asi8 [0 ] == pd .tslib . iNaT )
299
297
else :
300
298
self .assertTrue (pd .isnull (result [0 ]))
301
299
@@ -706,7 +704,7 @@ def test_sub_isub(self):
706
704
rng -= 1
707
705
tm .assert_index_equal (rng , expected )
708
706
709
- def test_value_counts (self ):
707
+ def test_value_counts_unique (self ):
710
708
# GH 7735
711
709
for tz in [None , 'UTC' , 'Asia/Tokyo' , 'US/Eastern' ]:
712
710
idx = pd .date_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 )
@@ -717,6 +715,9 @@ def test_value_counts(self):
717
715
expected = Series (range (10 , 0 , - 1 ), index = exp_idx , dtype = 'int64' )
718
716
tm .assert_series_equal (idx .value_counts (), expected )
719
717
718
+ expected = pd .date_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 , tz = tz )
719
+ tm .assert_index_equal (idx .unique (), expected )
720
+
720
721
idx = DatetimeIndex (['2013-01-01 09:00' , '2013-01-01 09:00' , '2013-01-01 09:00' ,
721
722
'2013-01-01 08:00' , '2013-01-01 08:00' , pd .NaT ], tz = tz )
722
723
@@ -728,6 +729,8 @@ def test_value_counts(self):
728
729
expected = Series ([3 , 2 , 1 ], index = exp_idx )
729
730
tm .assert_series_equal (idx .value_counts (dropna = False ), expected )
730
731
732
+ tm .assert_index_equal (idx .unique (), exp_idx )
733
+
731
734
732
735
class TestPeriodIndexOps (Ops ):
733
736
_allowed = '_allow_period_index_ops'
@@ -987,7 +990,7 @@ def test_sub_isub(self):
987
990
rng -= 1
988
991
tm .assert_index_equal (rng , expected )
989
992
990
- def test_value_counts (self ):
993
+ def test_value_counts_unique (self ):
991
994
# GH 7735
992
995
idx = pd .period_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 )
993
996
# create repeated values, 'n'th element is repeated by n+1 times
@@ -1000,6 +1003,9 @@ def test_value_counts(self):
1000
1003
expected = Series (range (10 , 0 , - 1 ), index = exp_idx , dtype = 'int64' )
1001
1004
tm .assert_series_equal (idx .value_counts (), expected )
1002
1005
1006
+ expected = pd .period_range ('2011-01-01 09:00' , freq = 'H' , periods = 10 )
1007
+ tm .assert_index_equal (idx .unique (), expected )
1008
+
1003
1009
idx = PeriodIndex (['2013-01-01 09:00' , '2013-01-01 09:00' , '2013-01-01 09:00' ,
1004
1010
'2013-01-01 08:00' , '2013-01-01 08:00' , pd .NaT ], freq = 'H' )
1005
1011
@@ -1011,6 +1017,8 @@ def test_value_counts(self):
1011
1017
expected = Series ([3 , 2 , 1 ], index = exp_idx )
1012
1018
tm .assert_series_equal (idx .value_counts (dropna = False ), expected )
1013
1019
1020
+ tm .assert_index_equal (idx .unique (), exp_idx )
1021
+
1014
1022
1015
1023
if __name__ == '__main__' :
1016
1024
import nose
0 commit comments