Skip to content

Commit 377acd8

Browse files
committed
BUG: nanops.var produces incorrect results due to int64 overflow
1 parent a27ba81 commit 377acd8

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
@@ -1401,7 +1401,8 @@ def testit():
14011401

14021402
# check the result is correct
14031403
nona = self.series.dropna()
1404-
assert_almost_equal(f(nona), alternate(nona))
1404+
assert_almost_equal(f(nona), alternate(nona.values))
1405+
assert_almost_equal(f(self.series), alternate(nona.values))
14051406

14061407
allna = self.series * nan
14071408
self.assert_(np.isnan(f(allna)))
@@ -1410,6 +1411,12 @@ def testit():
14101411
s = Series([1, 2, 3, None, 5])
14111412
f(s)
14121413

1414+
# 2888
1415+
l = [0]
1416+
l.extend(list(range(2**40,2**40+1000)))
1417+
s = Series(l, dtype='int64')
1418+
assert_almost_equal(float(f(s)), float(alternate(s.values)))
1419+
14131420
# check date range
14141421
if check_objects:
14151422
s = Series(bdate_range('1/1/2000', periods=10))

0 commit comments

Comments
 (0)