Skip to content

Commit 48165c9

Browse files
committed
Merge pull request #10249 from cmeeren/datetime_res_coercion
Datetime resolution coercion
2 parents b14abe8 + f41f4d4 commit 48165c9

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

doc/source/whatsnew/v0.16.2.txt

+1
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,4 @@ Bug Fixes
161161
- Bug in ``DataFrame.to_hdf()`` where table format would raise a seemingly unrelated error for invalid (non-string) column names. This is now explicitly forbidden. (:issue:`9057`)
162162
- Bug to handle masking empty ``DataFrame``(:issue:`10126`)
163163
- Bug where MySQL interface could not handle numeric table/column names (:issue:`10255`)
164+
- Bug where ``read_csv`` and similar failed if making ``MultiIndex`` and ``date_parser`` returned ``datetime64`` array of other time resolution than ``[ns]``.

pandas/io/parsers.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -2059,18 +2059,20 @@ def converter(*date_cols):
20592059
infer_datetime_format=infer_datetime_format
20602060
)
20612061
except:
2062-
return lib.try_parse_dates(strs, dayfirst=dayfirst)
2062+
return tools.to_datetime(
2063+
lib.try_parse_dates(strs, dayfirst=dayfirst))
20632064
else:
20642065
try:
2065-
result = date_parser(*date_cols)
2066+
result = tools.to_datetime(date_parser(*date_cols))
20662067
if isinstance(result, datetime.datetime):
20672068
raise Exception('scalar parser')
20682069
return result
20692070
except Exception:
20702071
try:
2071-
return lib.try_parse_dates(_concat_date_cols(date_cols),
2072-
parser=date_parser,
2073-
dayfirst=dayfirst)
2072+
return tools.to_datetime(
2073+
lib.try_parse_dates(_concat_date_cols(date_cols),
2074+
parser=date_parser,
2075+
dayfirst=dayfirst))
20742076
except Exception:
20752077
return generic_parser(date_parser, *date_cols)
20762078

pandas/io/tests/test_date_converters.py

+26-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import numpy as np
1212
from numpy.testing.decorators import slow
1313

14-
from pandas import DataFrame, Series, Index, isnull
14+
from pandas import DataFrame, Series, Index, MultiIndex, isnull
1515
import pandas.io.parsers as parsers
1616
from pandas.io.parsers import (read_csv, read_table, read_fwf,
1717
TextParser)
@@ -119,6 +119,31 @@ def test_generic(self):
119119
self.assertIn('ym', df)
120120
self.assertEqual(df.ym.ix[0], date(2001, 1, 1))
121121

122+
def test_dateparser_resolution_if_not_ns(self):
123+
# issue 10245
124+
data = """\
125+
date,time,prn,rxstatus
126+
2013-11-03,19:00:00,126,00E80000
127+
2013-11-03,19:00:00,23,00E80000
128+
2013-11-03,19:00:00,13,00E80000
129+
"""
130+
131+
def date_parser(date, time):
132+
datetime = np.array(date + 'T' + time + 'Z', dtype='datetime64[s]')
133+
return datetime
134+
135+
df = read_csv(StringIO(data), date_parser=date_parser,
136+
parse_dates={'datetime': ['date', 'time']},
137+
index_col=['datetime', 'prn'])
138+
139+
datetimes = np.array(['2013-11-03T19:00:00Z']*3, dtype='datetime64[s]')
140+
df_correct = DataFrame(data={'rxstatus': ['00E80000']*3},
141+
index=MultiIndex.from_tuples(
142+
[(datetimes[0], 126),
143+
(datetimes[1], 23),
144+
(datetimes[2], 13)],
145+
names=['datetime', 'prn']))
146+
assert_frame_equal(df, df_correct)
122147

123148
if __name__ == '__main__':
124149
import nose

0 commit comments

Comments
 (0)