8
8
from inspect import getargspec
9
9
from itertools import product , starmap
10
10
from distutils .version import LooseVersion
11
+ import warnings
11
12
12
13
import nose
13
-
14
14
from numpy import nan , inf
15
15
import numpy as np
16
16
import numpy .ma as ma
17
- import pandas as pd
17
+ import pandas . lib as lib
18
18
19
+ import pandas as pd
19
20
from pandas import (Index , Series , DataFrame , isnull , notnull , bdate_range ,
20
21
date_range , period_range , timedelta_range )
21
22
from pandas .core .index import MultiIndex
25
26
from pandas .tseries .tdi import Timedelta , TimedeltaIndex
26
27
import pandas .core .common as com
27
28
import pandas .core .config as cf
28
- import pandas .lib as lib
29
-
30
29
import pandas .core .datetools as datetools
31
30
import pandas .core .nanops as nanops
32
-
33
31
from pandas .compat import StringIO , lrange , range , zip , u , OrderedDict , long
34
32
from pandas import compat
35
33
from pandas .util .testing import (assert_series_equal ,
39
37
import pandas .util .testing as tm
40
38
41
39
40
+
42
41
#------------------------------------------------------------------------------
43
42
# Series test cases
44
43
@@ -3442,7 +3441,6 @@ def test_ops_datetimelike_align(self):
3442
3441
3443
3442
def test_timedelta64_functions (self ):
3444
3443
3445
- from datetime import timedelta
3446
3444
from pandas import date_range
3447
3445
3448
3446
# index min/max
@@ -5830,6 +5828,71 @@ def test_apply_dont_convert_dtype(self):
5830
5828
self .assertEqual (result .dtype , object )
5831
5829
5832
5830
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
+ results = s .convert_objects (False , True , False )
5867
+ expected = Series ([nan , 3.1415 , nan , nan ])
5868
+ assert_series_equal (results , expected )
5869
+ results = s .convert_objects (False , False , True )
5870
+ assert_series_equal (results , s )
5871
+
5872
+ # test pass-through and non-conversion when other types selected
5873
+ s = Series (['1.0' ,'2.0' ,'3.0' ])
5874
+ results = s .convert_objects (True ,True ,True )
5875
+ expected = Series ([1.0 ,2.0 ,3.0 ])
5876
+ assert_series_equal (results , expected )
5877
+ results = s .convert_objects (True ,False ,True )
5878
+ assert_series_equal (results , s )
5879
+
5880
+ s = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )],
5881
+ dtype = 'O' )
5882
+ results = s .convert_objects (True ,True ,True )
5883
+ expected = Series ([datetime (2001 , 1 , 1 , 0 , 0 ),datetime (2001 , 1 , 1 , 0 , 0 )])
5884
+ assert_series_equal (results , expected )
5885
+ results = s .convert_objects (False ,True ,True )
5886
+ assert_series_equal (results , s )
5887
+
5888
+ td = datetime (2001 , 1 , 1 , 0 , 0 ) - datetime (2000 , 1 , 1 , 0 , 0 )
5889
+ s = Series ([td , td ], dtype = 'O' )
5890
+ results = s .convert_objects (True ,True ,True )
5891
+ expected = Series ([td , td ])
5892
+ assert_series_equal (results , expected )
5893
+ results = s .convert_objects (True ,True ,False )
5894
+ assert_series_equal (results , s )
5895
+
5833
5896
5834
5897
s = Series ([1. , 2 , 3 ], index = ['a' , 'b' , 'c' ])
5835
5898
result = s .convert_objects (convert_dates = False , convert_numeric = True )
@@ -5848,20 +5911,19 @@ def test_convert_objects(self):
5848
5911
5849
5912
r = s .copy ().astype ('O' )
5850
5913
r ['a' ] = 'garbled'
5851
- expected = s .copy ()
5852
- expected ['a' ] = np .nan
5853
5914
result = r .convert_objects (convert_dates = False , convert_numeric = True )
5915
+ expected = s .copy ()
5916
+ expected ['a' ] = nan
5854
5917
assert_series_equal (result , expected )
5855
5918
5856
5919
# GH 4119, not converting a mixed type (e.g.floats and object)
5857
5920
s = Series ([1 , 'na' , 3 , 4 ])
5858
5921
result = s .convert_objects (convert_numeric = True )
5859
- expected = Series ([1 , np . nan , 3 , 4 ])
5922
+ expected = Series ([1 , nan , 3 , 4 ])
5860
5923
assert_series_equal (result , expected )
5861
5924
5862
5925
s = Series ([1 , '' , 3 , 4 ])
5863
5926
result = s .convert_objects (convert_numeric = True )
5864
- expected = Series ([1 , np .nan , 3 , 4 ])
5865
5927
assert_series_equal (result , expected )
5866
5928
5867
5929
# dates
@@ -5885,23 +5947,28 @@ def test_convert_objects(self):
5885
5947
[Timestamp (
5886
5948
'20010101' ), Timestamp ('20010102' ), Timestamp ('20010103' ),
5887
5949
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 )
5950
+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5951
+ convert_numeric = False ,
5952
+ convert_timedeltas = False )
5890
5953
assert_series_equal (result , expected )
5891
- result = s2 .convert_objects (
5892
- convert_dates = 'coerce' , convert_numeric = True )
5954
+ result = s2 .convert_objects (convert_dates = 'coerce' ,
5955
+ convert_numeric = False ,
5956
+ convert_timedeltas = False )
5893
5957
assert_series_equal (result , expected )
5894
5958
5895
5959
# preserver all-nans (if convert_dates='coerce')
5896
5960
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 )
5961
+ result = s .convert_objects (convert_dates = 'coerce' ,
5962
+ convert_numeric = False ,
5963
+ convert_timedeltas = False )
5964
+ expected = Series ([lib .NaT ]* 4 )
5965
+ assert_series_equal (result , expected )
5900
5966
5901
5967
# preserver if non-object
5902
5968
s = Series ([1 ], dtype = 'float32' )
5903
- result = s .convert_objects (
5904
- convert_dates = 'coerce' , convert_numeric = False )
5969
+ result = s .convert_objects (convert_dates = 'coerce' ,
5970
+ convert_numeric = False ,
5971
+ convert_timedeltas = False )
5905
5972
assert_series_equal (result , s )
5906
5973
5907
5974
#r = s.copy()
@@ -5910,13 +5977,14 @@ def test_convert_objects(self):
5910
5977
#self.assertEqual(result.dtype, 'M8[ns]')
5911
5978
5912
5979
# dateutil parses some single letters into today's value as a date
5980
+ expected = Series ([lib .NaT ])
5913
5981
for x in 'abcdefghijklmnopqrstuvwxyz' :
5914
5982
s = Series ([x ])
5915
5983
result = s .convert_objects (convert_dates = 'coerce' )
5916
- assert_series_equal (result , s )
5984
+ assert_series_equal (result , expected )
5917
5985
s = Series ([x .upper ()])
5918
5986
result = s .convert_objects (convert_dates = 'coerce' )
5919
- assert_series_equal (result , s )
5987
+ assert_series_equal (result , expected )
5920
5988
5921
5989
def test_convert_objects_preserve_bool (self ):
5922
5990
s = Series ([1 , True , 3 , 5 ], dtype = object )
0 commit comments