You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Series cumSum/cumProd/cumMax/cumMin, abs, std/var and nUnique mishandle missing values #708
Describe the bug
Danfo follows the pandas API and skips missing values in Series.sum() and Series.mean(), but cumSum, cumProd, cumMax, cumMin, abs, std, var, and nUnique mishandle NaN and null:
cumSum / cumMax / cumMin let NaN propagate to later entries instead of skipping missing values, and cumProd treats null as 0 (2.5 * null === 0).
abs passes null to Math.abs(null), turning a missing value into 0.
std and var return 0 instead of NaN on a single-element Series (unbiased sample variance with ddof=1 divides by N - 1 = 0).
nUnique counts NaN as a distinct value.
To Reproduce
Run with node after npm i danfojs-node@1.2.0:
const{ Series }=require('danfojs-node')console.log('cumSum:',newSeries([3,NaN,7,-1.5]).cumSum().values)console.log('cumProd:',newSeries([1,2.5,null,4]).cumProd().values)console.log('cumMax:',newSeries([NaN,1,2]).cumMax().values)console.log('cumMin:',newSeries([NaN,1,2]).cumMin().values)console.log('abs:',newSeries([-1,null,-3]).abs().values)console.log('std:',newSeries([1]).std())console.log('var:',newSeries([1]).var())console.log('nUnique:',newSeries([3,NaN,7,NaN]).nUnique())
Desktop (please complete the following information):
OS: Linux x86_64
Node.js: v26.13.0
Version: danfojs-node@1.2.0 (also on dev at 21d8c55)
Additional context
In src/danfojs-base/core/series.ts, cumOps combines tempval and currVal directly without checking utils.isEmpty, and abs runs this.values.map(val => Math.abs(val as number)) where Math.abs(null) evaluates to 0.
Activity