88from inspect import getargspec
99from itertools import product , starmap
1010from distutils .version import LooseVersion
11+ import warnings
1112
1213import nose
13-
1414from numpy import nan , inf
1515import numpy as np
1616import numpy .ma as ma
17- import pandas as pd
17+ import pandas . lib as lib
1818
19+ import pandas as pd
1920from pandas import (Index , Series , DataFrame , isnull , notnull , bdate_range ,
2021 date_range , period_range , timedelta_range )
2122from pandas .core .index import MultiIndex
2526from pandas .tseries .tdi import Timedelta , TimedeltaIndex
2627import pandas .core .common as com
2728import pandas .core .config as cf
28- import pandas .lib as lib
29-
3029import pandas .core .datetools as datetools
3130import pandas .core .nanops as nanops
32-
3331from pandas .compat import StringIO , lrange , range , zip , u , OrderedDict , long
3432from pandas import compat
3533from pandas .util .testing import (assert_series_equal ,
3937import pandas .util .testing as tm
4038
4139
40+
4241#------------------------------------------------------------------------------
4342# Series test cases
4443
@@ -3442,7 +3441,6 @@ def test_ops_datetimelike_align(self):
34423441
34433442 def test_timedelta64_functions (self ):
34443443
3445- from datetime import timedelta
34463444 from pandas import date_range
34473445
34483446 # index min/max
@@ -5830,6 +5828,72 @@ def test_apply_dont_convert_dtype(self):
58305828 self .assertEqual (result .dtype , object )
58315829
58325830 def test_convert_objects (self ):
5831+ # Tests: All to nans, coerce, true
5832+ # Test coercion returns correct type
5833+ s = Series (['a' , 'b' , 'c' ])
5834+ results = s .convert_objects ('coerce' , False , False )
5835+ expected = Series ([lib .NaT ] * 3 )
5836+ assert_series_equal (results , expected )
5837+
5838+ results = s .convert_objects (False , 'coerce' , False )
5839+ expected = Series ([np .nan ] * 3 )
5840+ assert_series_equal (results , expected )
5841+
5842+ expected = Series ([lib .NaT ] * 3 , dtype = np .dtype ('m8[ns]' ))
5843+ results = s .convert_objects (False , False , 'coerce' )
5844+ assert_series_equal (results , expected )
5845+
5846+ dt = datetime (2001 , 1 , 1 , 0 , 0 )
5847+ td = dt - datetime (2000 , 1 , 1 , 0 , 0 )
5848+ # Test coercion with mixed types
5849+ s = Series (['a' , '3.1415' , dt , td ])
5850+ results = s .convert_objects ('coerce' ,False ,False )
5851+ expected = Series ([lib .NaT , lib .NaT , dt , lib .NaT ])
5852+ assert_series_equal (results , expected )
5853+
5854+ results = s .convert_objects (False , 'coerce' ,False )
5855+ expected = Series ([nan , 3.1415 , nan , nan ])
5856+ assert_series_equal (results , expected )
5857+
5858+ results = s .convert_objects (False , False , 'coerce' )
5859+ expected = Series ([lib .NaT , lib .NaT , lib .NaT , td ],
5860+ dtype = np .dtype ('m8[ns]' ))
5861+ assert_series_equal (results , expected )
5862+
5863+ # Test standard conversion returns original
5864+ results = s .convert_objects (True , False , False )
5865+ assert_series_equal (results , s )
5866+ # TODO: This test fails since numeric conversion
5867+ # TODO: is different from date or ts conversion
5868+ #results = s.convert_objects(False, True, False)
5869+ #assert_series_equal(results, s)
5870+ results = s .convert_objects (False , False , True )
5871+ assert_series_equal (results , s )
5872+
5873+ # test pass-through and non-conversion when other types selected
5874+ s = Series (['1.0' ,'2.0' ,'3.0' ])
5875+ results = s .convert_objects (True ,True ,True )
5876+ expected = Series ([1.0 ,2.0 ,3.0 ])
5877+ assert_series_equal (results , expected )
5878+ results = s .convert_objects (True ,False ,True )
5879+ assert_series_equal (results , s )
5880+
5881+ s = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )],
5882+ dtype = 'O' )
5883+ results = s .convert_objects (True ,True ,True )
5884+ expected = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )])
5885+ assert_series_equal (results , expected )
5886+ results = s .convert_objects (False ,True ,True )
5887+ assert_series_equal (results , s )
5888+
5889+ td = datetime (2001 , 1 , 1 , 0 , 0 ) - datetime (2000 , 1 , 1 , 0 , 0 )
5890+ s = Series ([td , td ], dtype = 'O' )
5891+ results = s .convert_objects (True ,True ,True )
5892+ expected = Series ([td , td ])
5893+ assert_series_equal (results , expected )
5894+ results = s .convert_objects (True ,True ,False )
5895+ assert_series_equal (results , s )
5896+
58335897
58345898 s = Series ([1. , 2 , 3 ], index = ['a' , 'b' , 'c' ])
58355899 result = s .convert_objects (convert_dates = False , convert_numeric = True )
@@ -5885,23 +5949,28 @@ def test_convert_objects(self):
58855949 [Timestamp (
58865950 '20010101' ), Timestamp ('20010102' ), Timestamp ('20010103' ),
58875951 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 )
5952+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5953+ convert_numeric = False ,
5954+ convert_timedeltas = False )
58905955 assert_series_equal (result , expected )
5891- result = s2 .convert_objects (
5892- convert_dates = 'coerce' , convert_numeric = True )
5956+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5957+ convert_numeric = False ,
5958+ convert_timedeltas = False )
58935959 assert_series_equal (result , expected )
58945960
58955961 # preserver all-nans (if convert_dates='coerce')
58965962 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 )
5963+ result = s .convert_objects (convert_dates = 'coerce' ,
5964+ convert_numeric = False ,
5965+ convert_timedeltas = False )
5966+ expected = Series ([lib .NaT ]* 4 )
5967+ assert_series_equal (result , expected )
59005968
59015969 # preserver if non-object
59025970 s = Series ([1 ], dtype = 'float32' )
5903- result = s .convert_objects (
5904- convert_dates = 'coerce' , convert_numeric = False )
5971+ result = s .convert_objects (convert_dates = 'coerce' ,
5972+ convert_numeric = False ,
5973+ convert_timedeltas = False )
59055974 assert_series_equal (result , s )
59065975
59075976 #r = s.copy()
@@ -5910,13 +5979,14 @@ def test_convert_objects(self):
59105979 #self.assertEqual(result.dtype, 'M8[ns]')
59115980
59125981 # dateutil parses some single letters into today's value as a date
5982+ expected = Series ([lib .NaT ])
59135983 for x in 'abcdefghijklmnopqrstuvwxyz' :
59145984 s = Series ([x ])
59155985 result = s .convert_objects (convert_dates = 'coerce' )
5916- assert_series_equal (result , s )
5986+ assert_series_equal (result , expected )
59175987 s = Series ([x .upper ()])
59185988 result = s .convert_objects (convert_dates = 'coerce' )
5919- assert_series_equal (result , s )
5989+ assert_series_equal (result , expected )
59205990
59215991 def test_convert_objects_preserve_bool (self ):
59225992 s = Series ([1 , True , 3 , 5 ], dtype = object )
0 commit comments