@@ -1242,9 +1242,7 @@ def map(self, arg):
1242
1242
new_values = arg .view (np .ndarray ).take (indexer )
1243
1243
1244
1244
if notmask .any ():
1245
- if issubclass (new_values .dtype .type , np .integer ):
1246
- new_values = new_values .astype (float )
1247
-
1245
+ new_values = _maybe_upcast (new_values )
1248
1246
np .putmask (new_values , notmask , np .nan )
1249
1247
1250
1248
newSer = Series (new_values , index = self .index )
@@ -1307,11 +1305,7 @@ def reindex(self, index=None, method=None, copy=True):
1307
1305
1308
1306
notmask = - mask
1309
1307
if notmask .any ():
1310
- if issubclass (new_values .dtype .type , np .int_ ):
1311
- new_values = new_values .astype (float )
1312
- elif issubclass (new_values .dtype .type , np .bool_ ):
1313
- new_values = new_values .astype (object )
1314
-
1308
+ new_values = _maybe_upcast (new_values )
1315
1309
np .putmask (new_values , notmask , nan )
1316
1310
1317
1311
return Series (new_values , index = new_index )
@@ -1581,6 +1575,7 @@ def shift(self, periods, offset=None, **kwds):
1581
1575
1582
1576
if offset is None :
1583
1577
new_values = np .empty (len (self ), dtype = self .dtype )
1578
+ new_values = _maybe_upcast (new_values )
1584
1579
1585
1580
if periods > 0 :
1586
1581
new_values [periods :] = self .values [:- periods ]
@@ -1776,6 +1771,14 @@ def remove_na(arr):
1776
1771
"""
1777
1772
return arr [notnull (arr )]
1778
1773
1774
+ def _maybe_upcast (values ):
1775
+ if issubclass (values .dtype .type , np .int_ ):
1776
+ values = values .astype (float )
1777
+ elif issubclass (values .dtype .type , np .bool_ ):
1778
+ values = values .astype (object )
1779
+
1780
+ return values
1781
+
1779
1782
def _seriesRepr (index , vals , nanRep = 'NaN' ):
1780
1783
string_index = index .format ()
1781
1784
maxlen = max (len (x ) for x in string_index )
0 commit comments