@@ -5830,6 +5830,72 @@ def test_apply_dont_convert_dtype(self):
58305830 self .assertEqual (result .dtype , object )
58315831
58325832 def test_convert_objects (self ):
5833+ # Tests: All to nans, coerce, true
5834+ # Test coercion returns correct type
5835+ s = Series (['a' , 'b' , 'c' ])
5836+ results = s .convert_objects ('coerce' , False , False )
5837+ expected = Series ([lib .NaT ] * 3 )
5838+ assert_series_equal (results , expected )
5839+
5840+ results = s .convert_objects (False , 'coerce' , False )
5841+ expected = Series ([np .nan ] * 3 )
5842+ assert_series_equal (results , expected )
5843+
5844+ expected = Series ([lib .NaT ] * 3 , dtype = np .dtype ('m8[ns]' ))
5845+ results = s .convert_objects (False , False , 'coerce' )
5846+ assert_series_equal (results , expected )
5847+
5848+ dt = datetime (2001 , 1 , 1 , 0 , 0 )
5849+ td = dt - datetime (2000 , 1 , 1 , 0 , 0 )
5850+
5851+ # Test coercion with mixed types
5852+ s = Series (['a' , '3.1415' , dt , td ])
5853+ results = s .convert_objects ('coerce' ,False ,False )
5854+ expected = Series ([lib .NaT , lib .NaT , dt , lib .NaT ])
5855+ assert_series_equal (results , expected )
5856+
5857+ results = s .convert_objects (False , 'coerce' ,False )
5858+ expected = Series ([nan , 3.1415 , nan , nan ])
5859+ assert_series_equal (results , expected )
5860+
5861+ results = s .convert_objects (False , False , 'coerce' )
5862+ expected = Series ([lib .NaT , lib .NaT , lib .NaT , td ],
5863+ dtype = np .dtype ('m8[ns]' ))
5864+ assert_series_equal (results , expected )
5865+
5866+ # Test standard conversion returns original
5867+ results = s .convert_objects (True , False , False )
5868+ assert_series_equal (results , s )
5869+ results = s .convert_objects (False , True , False )
5870+ expected = Series ([nan , 3.1415 , nan , nan ])
5871+ assert_series_equal (results , expected )
5872+ results = s .convert_objects (False , False , True )
5873+ assert_series_equal (results , s )
5874+
5875+ # test pass-through and non-conversion when other types selected
5876+ s = Series (['1.0' ,'2.0' ,'3.0' ])
5877+ results = s .convert_objects (True ,True ,True )
5878+ expected = Series ([1.0 ,2.0 ,3.0 ])
5879+ assert_series_equal (results , expected )
5880+ results = s .convert_objects (True ,False ,True )
5881+ assert_series_equal (results , s )
5882+
5883+ s = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )],
5884+ dtype = 'O' )
5885+ results = s .convert_objects (True ,True ,True )
5886+ expected = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )])
5887+ assert_series_equal (results , expected )
5888+ results = s .convert_objects (False ,True ,True )
5889+ assert_series_equal (results , s )
5890+
5891+ td = datetime (2001 , 1 , 1 , 0 , 0 ) - datetime (2000 , 1 , 1 , 0 , 0 )
5892+ s = Series ([td , td ], dtype = 'O' )
5893+ results = s .convert_objects (True ,True ,True )
5894+ expected = Series ([td , td ])
5895+ assert_series_equal (results , expected )
5896+ results = s .convert_objects (True ,True ,False )
5897+ assert_series_equal (results , s )
5898+
58335899
58345900 s = Series ([1. , 2 , 3 ], index = ['a' , 'b' , 'c' ])
58355901 result = s .convert_objects (convert_dates = False , convert_numeric = True )
@@ -5848,20 +5914,19 @@ def test_convert_objects(self):
58485914
58495915 r = s .copy ().astype ('O' )
58505916 r ['a' ] = 'garbled'
5851- expected = s .copy ()
5852- expected ['a' ] = np .nan
58535917 result = r .convert_objects (convert_dates = False , convert_numeric = True )
5918+ expected = s .copy ()
5919+ expected ['a' ] = nan
58545920 assert_series_equal (result , expected )
58555921
58565922 # GH 4119, not converting a mixed type (e.g.floats and object)
58575923 s = Series ([1 , 'na' , 3 , 4 ])
58585924 result = s .convert_objects (convert_numeric = True )
5859- expected = Series ([1 , np . nan , 3 , 4 ])
5925+ expected = Series ([1 , nan , 3 , 4 ])
58605926 assert_series_equal (result , expected )
58615927
58625928 s = Series ([1 , '' , 3 , 4 ])
58635929 result = s .convert_objects (convert_numeric = True )
5864- expected = Series ([1 , np .nan , 3 , 4 ])
58655930 assert_series_equal (result , expected )
58665931
58675932 # dates
@@ -5885,23 +5950,28 @@ def test_convert_objects(self):
58855950 [Timestamp (
58865951 '20010101' ), Timestamp ('20010102' ), Timestamp ('20010103' ),
58875952 lib .NaT , lib .NaT , lib .NaT , Timestamp ('20010104' ), Timestamp ('20010105' )], dtype = 'M8[ns]' )
5888- result = s2 .convert_objects (
5889- convert_dates = 'coerce' , convert_numeric = False )
5953+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5954+ convert_numeric = False ,
5955+ convert_timedeltas = False )
58905956 assert_series_equal (result , expected )
5891- result = s2 .convert_objects (
5892- convert_dates = 'coerce' , convert_numeric = True )
5957+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5958+ convert_numeric = False ,
5959+ convert_timedeltas = False )
58935960 assert_series_equal (result , expected )
58945961
58955962 # preserver all-nans (if convert_dates='coerce')
58965963 s = Series (['foo' , 'bar' , 1 , 1.0 ], dtype = 'O' )
5897- result = s .convert_objects (
5898- convert_dates = 'coerce' , convert_numeric = False )
5899- assert_series_equal (result , s )
5964+ result = s .convert_objects (convert_dates = 'coerce' ,
5965+ convert_numeric = False ,
5966+ convert_timedeltas = False )
5967+ expected = Series ([lib .NaT ]* 4 )
5968+ assert_series_equal (result , expected )
59005969
59015970 # preserver if non-object
59025971 s = Series ([1 ], dtype = 'float32' )
5903- result = s .convert_objects (
5904- convert_dates = 'coerce' , convert_numeric = False )
5972+ result = s .convert_objects (convert_dates = 'coerce' ,
5973+ convert_numeric = False ,
5974+ convert_timedeltas = False )
59055975 assert_series_equal (result , s )
59065976
59075977 #r = s.copy()
@@ -5910,13 +5980,14 @@ def test_convert_objects(self):
59105980 #self.assertEqual(result.dtype, 'M8[ns]')
59115981
59125982 # dateutil parses some single letters into today's value as a date
5983+ expected = Series ([lib .NaT ])
59135984 for x in 'abcdefghijklmnopqrstuvwxyz' :
59145985 s = Series ([x ])
59155986 result = s .convert_objects (convert_dates = 'coerce' )
5916- assert_series_equal (result , s )
5987+ assert_series_equal (result , expected )
59175988 s = Series ([x .upper ()])
59185989 result = s .convert_objects (convert_dates = 'coerce' )
5919- assert_series_equal (result , s )
5990+ assert_series_equal (result , expected )
59205991
59215992 def test_convert_objects_preserve_bool (self ):
59225993 s = Series ([1 , True , 3 , 5 ], dtype = object )
0 commit comments