Skip to content

Commit 6d9e8ca

Browse files
committed
Add encoder to handle masked numbers.
1 parent d6e1724 commit 6d9e8ca

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

plotly/utils.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,21 @@ def sageJSONEncoder(self, obj):
126126
pass
127127
return None
128128

129+
def maskedNumbersEncoder(self, obj):
130+
"""This catches masked numbers which can't be serialized.
131+
132+
Pandas (and others) may use masked numbers to signify data that's
133+
not NaN, but also not valid in computations; something to be ignored.
134+
135+
"""
136+
import math
137+
try:
138+
if math.isnan(obj):
139+
return float('NaN')
140+
except:
141+
pass
142+
return None
143+
129144
def builtinJSONEncoder(self, obj):
130145
try:
131146
return obj.to_plotly_json()
@@ -138,7 +153,7 @@ def default(self, obj):
138153
except TypeError as e:
139154
encoders = (self.builtinJSONEncoder, self.datetimeJSONEncoder,
140155
self.numpyJSONEncoder, self.pandasJSONEncoder,
141-
self.sageJSONEncoder)
156+
self.sageJSONEncoder, self.maskedNumbersEncoder)
142157
for encoder in encoders:
143158
s = encoder(obj)
144159
if s is not None:

0 commit comments

Comments
 (0)