Skip to content

Commit dc990ae

Browse files
committed
BUG: shifting int Series should upcast. address GH #154
1 parent 9c45f6f commit dc990ae

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

pandas/core/series.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -1242,9 +1242,7 @@ def map(self, arg):
12421242
new_values = arg.view(np.ndarray).take(indexer)
12431243

12441244
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)
12481246
np.putmask(new_values, notmask, np.nan)
12491247

12501248
newSer = Series(new_values, index=self.index)
@@ -1307,11 +1305,7 @@ def reindex(self, index=None, method=None, copy=True):
13071305

13081306
notmask = -mask
13091307
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)
13151309
np.putmask(new_values, notmask, nan)
13161310

13171311
return Series(new_values, index=new_index)
@@ -1581,6 +1575,7 @@ def shift(self, periods, offset=None, **kwds):
15811575

15821576
if offset is None:
15831577
new_values = np.empty(len(self), dtype=self.dtype)
1578+
new_values = _maybe_upcast(new_values)
15841579

15851580
if periods > 0:
15861581
new_values[periods:] = self.values[:-periods]
@@ -1776,6 +1771,14 @@ def remove_na(arr):
17761771
"""
17771772
return arr[notnull(arr)]
17781773

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+
17791782
def _seriesRepr(index, vals, nanRep='NaN'):
17801783
string_index = index.format()
17811784
maxlen = max(len(x) for x in string_index)

pandas/tests/test_series.py

+6
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,12 @@ def test_shift(self):
752752
unshifted = self.ts.shift(0)
753753
assert_series_equal(unshifted, self.ts)
754754

755+
def test_shift_int(self):
756+
ts = self.ts.astype(int)
757+
shifted = ts.shift(1)
758+
expected = ts.astype(float).shift(1)
759+
assert_series_equal(shifted, expected)
760+
755761
def test_truncate(self):
756762
offset = datetools.bday
757763

0 commit comments

Comments
 (0)