@@ -76,12 +76,26 @@ def to_datetime(arg, errors='ignore', dayfirst=False, utc=None, box=True,
7676 -------
7777 ret : datetime if parsing succeeded
7878 """
79+ from pandas import Timestamp
7980 from pandas .core .series import Series
8081 from pandas .tseries .index import DatetimeIndex
8182
82- def _convert_f (arg ):
83- arg = com ._ensure_object (arg )
83+ def _convert_listlike (arg , box ):
84+
85+ if isinstance (arg , (list ,tuple )):
86+ arg = np .array (arg , dtype = 'O' )
8487
88+ if com .is_datetime64_dtype (arg ):
89+ if box and not isinstance (arg , DatetimeIndex ):
90+ try :
91+ return DatetimeIndex (arg , tz = 'utc' if utc else None )
92+ except ValueError , e :
93+ values , tz = tslib .datetime_to_datetime64 (arg )
94+ return DatetimeIndex ._simple_new (values , None , tz = tz )
95+
96+ return arg
97+
98+ arg = com ._ensure_object (arg )
8599 try :
86100 if format is not None :
87101 result = tslib .array_strptime (arg , format )
@@ -92,44 +106,25 @@ def _convert_f(arg):
92106 if com .is_datetime64_dtype (result ) and box :
93107 result = DatetimeIndex (result , tz = 'utc' if utc else None )
94108 return result
109+
95110 except ValueError , e :
96111 try :
97112 values , tz = tslib .datetime_to_datetime64 (arg )
98113 return DatetimeIndex ._simple_new (values , None , tz = tz )
99114 except (ValueError , TypeError ):
100115 raise e
101116
102- def _convert_listlike (arg ):
103- if isinstance (arg , list ):
104- arg = np .array (arg , dtype = 'O' )
105-
106- if com .is_datetime64_dtype (arg ):
107- if box and not isinstance (arg , DatetimeIndex ):
108- try :
109- return DatetimeIndex (arg , tz = 'utc' if utc else None )
110- except ValueError , e :
111- try :
112- values , tz = tslib .datetime_to_datetime64 (arg )
113- return DatetimeIndex ._simple_new (values , None , tz = tz )
114- except (ValueError , TypeError ):
115- raise e
116- return arg
117-
118- return _convert_f (arg )
119-
120117 if arg is None :
121118 return arg
122- elif isinstance (arg , datetime ):
119+ elif isinstance (arg , Timestamp ):
123120 return arg
124121 elif isinstance (arg , Series ):
125- values = arg .values
126- if not com .is_datetime64_dtype (values ):
127- values = _convert_f (values )
122+ values = _convert_listlike (arg .values , box = False )
128123 return Series (values , index = arg .index , name = arg .name )
129- elif isinstance (arg , ( np . ndarray , list ) ):
130- return _convert_listlike (arg )
124+ elif com . is_list_like (arg ):
125+ return _convert_listlike (arg , box = box )
131126
132- return _convert_listlike (np .array ([ arg ], dtype = 'O' ) )[0 ]
127+ return _convert_listlike (np .array ([ arg ]), box = box )[0 ]
133128
134129class DateParseError (ValueError ):
135130 pass
0 commit comments