@@ -889,6 +889,37 @@ def test_mode(self):
889
889
dtype = df ["C" ].dtype )})
890
890
tm .assert_frame_equal (df .mode (), exp )
891
891
892
+ def test_mode_dropna (self ):
893
+ # GH 17534
894
+ # Test the dropna=False parameter for mode
895
+
896
+ df = pd .DataFrame ({"A" : [1 , np .nan , np .nan , np .nan ],
897
+ "B" : [np .nan , np .nan , 'a' , np .nan ],
898
+ "C" : Categorical ([np .nan , np .nan , 'a' , np .nan ]),
899
+ "D" : pd .to_datetime (['NaT' , '2000-1-2' , 'NaT' , 'NaT' ]),
900
+ "E" : pd .to_timedelta (['1 days' , 'nan' , 'nan' , 'nan' ]),
901
+ "F" : [1 , 1 , np .nan , np .nan ],
902
+ "G" : [np .nan , np .nan , 'a' , 'a' ],
903
+ "H" : Categorical (['a' , np .nan , 'a' , np .nan ]),
904
+ "I" : pd .to_datetime (['2000-1-2' , '2000-1-2' , 'NaT' , 'NaT' ]),
905
+ "J" : pd .to_timedelta (['1 days' , 'nan' , '1 days' , 'nan' ])})
906
+
907
+ result = df .loc [:, 'A' :'E' ].mode (dropna = False )
908
+ expected = pd .DataFrame ({'A' : [np .nan ],
909
+ 'B' : np .array ([np .nan ], dtype = object ),
910
+ 'C' : Categorical ([np .nan ], categories = ['a' ]),
911
+ 'D' : [pd .NaT ],
912
+ 'E' : pd .to_timedelta ([pd .NaT ])})
913
+ tm .assert_frame_equal (result , expected )
914
+
915
+ result = df .loc [:, 'F' :'J' ].mode (dropna = False )
916
+ expected = pd .DataFrame ({'F' : [1 , np .nan ],
917
+ 'G' : [np .nan , 'a' ],
918
+ 'H' : Categorical ([np .nan , 'a' ], categories = ['a' ]),
919
+ 'I' : pd .to_datetime (['NaT' , '2000-1-2' ]),
920
+ 'J' : pd .to_timedelta (['nan' , '1 days' ])})
921
+ tm .assert_frame_equal (result , expected )
922
+
892
923
def test_operators_timedelta64 (self ):
893
924
from datetime import timedelta
894
925
df = DataFrame (dict (A = date_range ('2012-1-1' , periods = 3 , freq = 'D' ),
0 commit comments