Skip to content

Commit ecfe824

Browse files
committed
Second attempt at removing compat code from maybe_promote
1 parent 9bac669 commit ecfe824

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

pandas/core/dtypes/cast.py

+13-20
Original file line numberDiff line numberDiff line change
@@ -264,29 +264,22 @@ def maybe_promote(dtype, fill_value=np.nan):
264264

265265
# returns tuple of (dtype, fill_value)
266266
if issubclass(dtype.type, (np.datetime64, np.timedelta64)):
267-
# for now: refuse to upcast datetime64
268-
# (this is because datetime64 will not implicitly upconvert
269-
# to object correctly as of numpy 1.6.1)
270-
# TODO: remove old numpy compat code (without introducing segfault for
271-
# tests/test_take.py::TestTake::test_2d_datetime64)
272267
if isna(fill_value):
273268
fill_value = iNaT
269+
elif issubclass(dtype.type, np.datetime64):
270+
try:
271+
fill_value = tslibs.Timestamp(fill_value).value
272+
except Exception:
273+
dtype = np.object_
274+
fill_value = np.nan
275+
elif issubclass(dtype.type, np.timedelta64):
276+
try:
277+
fill_value = tslibs.Timedelta(fill_value).value
278+
except Exception:
279+
dtype = np.object_
280+
fill_value = np.nan
274281
else:
275-
if issubclass(dtype.type, np.datetime64):
276-
try:
277-
fill_value = tslibs.Timestamp(fill_value).value
278-
except Exception:
279-
# the proper thing to do here would probably be to upcast
280-
# to object (but numpy 1.6.1 doesn't do this properly)
281-
fill_value = iNaT
282-
elif issubclass(dtype.type, np.timedelta64):
283-
try:
284-
fill_value = tslibs.Timedelta(fill_value).value
285-
except Exception:
286-
# as for datetimes, cannot upcast to object
287-
fill_value = iNaT
288-
else:
289-
fill_value = iNaT
282+
fill_value = iNaT
290283
elif is_datetimetz(dtype):
291284
if isna(fill_value):
292285
fill_value = iNaT

0 commit comments

Comments
 (0)