@@ -5830,6 +5830,72 @@ def test_apply_dont_convert_dtype(self):
5830
5830
self .assertEqual (result .dtype , object )
5831
5831
5832
5832
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
+
5833
5899
5834
5900
s = Series ([1. , 2 , 3 ], index = ['a' , 'b' , 'c' ])
5835
5901
result = s .convert_objects (convert_dates = False , convert_numeric = True )
@@ -5848,20 +5914,19 @@ def test_convert_objects(self):
5848
5914
5849
5915
r = s .copy ().astype ('O' )
5850
5916
r ['a' ] = 'garbled'
5851
- expected = s .copy ()
5852
- expected ['a' ] = np .nan
5853
5917
result = r .convert_objects (convert_dates = False , convert_numeric = True )
5918
+ expected = s .copy ()
5919
+ expected ['a' ] = nan
5854
5920
assert_series_equal (result , expected )
5855
5921
5856
5922
# GH 4119, not converting a mixed type (e.g.floats and object)
5857
5923
s = Series ([1 , 'na' , 3 , 4 ])
5858
5924
result = s .convert_objects (convert_numeric = True )
5859
- expected = Series ([1 , np . nan , 3 , 4 ])
5925
+ expected = Series ([1 , nan , 3 , 4 ])
5860
5926
assert_series_equal (result , expected )
5861
5927
5862
5928
s = Series ([1 , '' , 3 , 4 ])
5863
5929
result = s .convert_objects (convert_numeric = True )
5864
- expected = Series ([1 , np .nan , 3 , 4 ])
5865
5930
assert_series_equal (result , expected )
5866
5931
5867
5932
# dates
@@ -5885,23 +5950,28 @@ def test_convert_objects(self):
5885
5950
[Timestamp (
5886
5951
'20010101' ), Timestamp ('20010102' ), Timestamp ('20010103' ),
5887
5952
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 )
5890
5956
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 )
5893
5960
assert_series_equal (result , expected )
5894
5961
5895
5962
# preserver all-nans (if convert_dates='coerce')
5896
5963
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 )
5900
5969
5901
5970
# preserver if non-object
5902
5971
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 )
5905
5975
assert_series_equal (result , s )
5906
5976
5907
5977
#r = s.copy()
@@ -5910,13 +5980,14 @@ def test_convert_objects(self):
5910
5980
#self.assertEqual(result.dtype, 'M8[ns]')
5911
5981
5912
5982
# dateutil parses some single letters into today's value as a date
5983
+ expected = Series ([lib .NaT ])
5913
5984
for x in 'abcdefghijklmnopqrstuvwxyz' :
5914
5985
s = Series ([x ])
5915
5986
result = s .convert_objects (convert_dates = 'coerce' )
5916
- assert_series_equal (result , s )
5987
+ assert_series_equal (result , expected )
5917
5988
s = Series ([x .upper ()])
5918
5989
result = s .convert_objects (convert_dates = 'coerce' )
5919
- assert_series_equal (result , s )
5990
+ assert_series_equal (result , expected )
5920
5991
5921
5992
def test_convert_objects_preserve_bool (self ):
5922
5993
s = Series ([1 , True , 3 , 5 ], dtype = object )
0 commit comments