Skip to content

Commit 6dec888

Browse files
committed
Merge pull request #2889 from stephenwlin/nanops-int64
BUG: nanops.var produces incorrect results due to int64 overflow (fixes #2888)
2 parents 5d8eb29 + 377acd8 commit 6dec888

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

pandas/core/nanops.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ def get_median(x):
138138

139139

140140
def _nanvar(values, axis=None, skipna=True, ddof=1):
141+
if not isinstance(values.dtype.type, np.floating):
142+
values = values.astype('f8')
143+
141144
mask = isnull(values)
142145

143146
if axis is not None:

pandas/tests/test_series.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1460,7 +1460,8 @@ def testit():
14601460

14611461
# check the result is correct
14621462
nona = self.series.dropna()
1463-
assert_almost_equal(f(nona), alternate(nona))
1463+
assert_almost_equal(f(nona), alternate(nona.values))
1464+
assert_almost_equal(f(self.series), alternate(nona.values))
14641465

14651466
allna = self.series * nan
14661467
self.assert_(np.isnan(f(allna)))
@@ -1469,6 +1470,12 @@ def testit():
14691470
s = Series([1, 2, 3, None, 5])
14701471
f(s)
14711472

1473+
# 2888
1474+
l = [0]
1475+
l.extend(list(range(2**40,2**40+1000)))
1476+
s = Series(l, dtype='int64')
1477+
assert_almost_equal(float(f(s)), float(alternate(s.values)))
1478+
14721479
# check date range
14731480
if check_objects:
14741481
s = Series(bdate_range('1/1/2000', periods=10))

0 commit comments

Comments
 (0)