散景:ValueError:超出范围的浮点值不符合JSON [英] Bokeh: ValueError: Out of range float values are not JSON compliant
问题描述
(一年前),我遇到了这个讨论: https://github.com/bokeh/bokeh/issues/2392
I came across this discussion (from a year ago): https://github.com/bokeh/bokeh/issues/2392
我也看到了白色的屏幕,没有任何错误..然后我尝试使用2列的一小部分并尝试以下操作:
I also saw the white screen without any errors..and then i tried to take a small subset of 2 columns and tried the below:
由于熊猫也只得到了一堆行,里面有空数据,所以我尝试了dropna ..这导致根本没有数据.因此,我只指定了应该进入df的行(因此df = df.head(n=19)
行)
Since pandas just gets a bunch of rows with empty data in there as well, I tried dropna.. this resulted in there being no data at all. So instead I just specified the rows that should go into the df (hence the df = df.head(n=19)
line)
import pandas as pd
from bokeh.plotting import figure, output_file, show
df = pd.read_excel(path,sheetname,parse_cols="A:B")
df = df.head(n=19)
print(df)
rtngs = ['iAAA','iAA+','iAA','iAA-','iA+','iA','iA-','iBBB+','iBBB','iBBB-','iBB+','iBB','iBB-','iB+','iB','iB-','NR','iCCC+']
x= df['Score']
output_file("line.html")
p = figure(plot_width=400, plot_height=400, x_range=(0,100),y_range=rtngs)
# add a circle renderer with a size, color, and alpha
p.circle(df['Score'], df['Rating'], size=20, color="navy", alpha=0.5)
# show the results
#output_notebook()
show(p)
df:
Rating Score
0 iAAA 64.0
1 iAA+ 33.0
2 iAA 7.0
3 iAA- 28.0
4 iA+ 36.0
5 iA 62.0
6 iA- 99.0
7 iBBB+ 10.0
8 iBBB 93.0
9 iBBB- 91.0
10 iBB+ 79.0
11 iBB 19.0
12 iBB- 95.0
13 iB+ 26.0
14 iB 9.0
15 iB- 26.0
16 NR 49.0
17 iCCC+ 51.0
18 iAAA 18.0
上面显示的是笔记本中的输出,但仍会抛出:ValueError: Out of range float values are not JSON compliant
The above is showing me an output within the notebook, but still throws : ValueError: Out of range float values are not JSON compliant
它也不会(因此吗?)也不会产生输出文件.如何消除这个小子集的错误?它与NaN值有关吗?这样还能解决较大数据集的死亡白屏"问题吗?
And also it doesn't (hence?) produce the output file as well. How do I get rid of this error for this small subset? Is it related to NaN values? Would that also solve the 'white screen of death' issue for the larger dataset?
感谢vm帮忙看看!
如果您想看到整个错误:
In case you would like to see the entire error:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-12-4fa6b88aa415> in <module>()
16 # show the results
17 #output_notebook()
---> 18 show(p)
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\io.py in show(obj, browser, new)
300 if obj not in _state.document.roots:
301 _state.document.add_root(obj)
--> 302 return _show_with_state(obj, _state, browser, new)
303
304
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\io.py in _show_with_state(obj, state, browser, new)
310
311 if state.notebook:
--> 312 comms_handle = _show_notebook_with_state(obj, state)
313 shown = True
314
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\io.py in _show_notebook_with_state(obj, state)
334 comms_target = make_id()
335 publish_display_data({'text/html': notebook_div(obj, comms_target)})
--> 336 handle = _CommsHandle(get_comms(comms_target), state.document, state.document.to_json())
337 state.last_comms_handle = handle
338 return handle
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in to_json(self)
792 # this is a total hack to go via a string, needed because
793 # our BokehJSONEncoder goes straight to a string.
--> 794 doc_json = self.to_json_string()
795 return loads(doc_json)
796
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in to_json_string(self, indent)
785 }
786
--> 787 return serialize_json(json, indent=indent)
788
789 def to_json(self):
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\core\json_encoder.py in serialize_json(obj, encoder, indent, **kwargs)
97 indent = 2
98
---> 99 return json.dumps(obj, cls=encoder, allow_nan=False, indent=indent, separators=separators, sort_keys=True, **kwargs)
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\json\__init__.py in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
235 check_circular=check_circular, allow_nan=allow_nan, indent=indent,
236 separators=separators, default=default, sort_keys=sort_keys,
--> 237 **kw).encode(obj)
238
239
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\json\encoder.py in encode(self, o)
197 # exceptions aren't as detailed. The list call should be roughly
198 # equivalent to the PySequence_Fast that ''.join() would do.
--> 199 chunks = self.iterencode(o, _one_shot=True)
200 if not isinstance(chunks, (list, tuple)):
201 chunks = list(chunks)
C:\Users\x\AppData\Local\Continuum\Anaconda3\lib\json\encoder.py in iterencode(self, o, _one_shot)
255 self.key_separator, self.item_separator, self.sort_keys,
256 self.skipkeys, _one_shot)
--> 257 return _iterencode(o, 0)
258
259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
ValueError: Out of range float values are not JSON compliant
推荐答案
我遇到了相同的错误,并调试了问题:我在绘制的数据集中具有NaN
值,并且具有bokeh
的serialize_json()
函数(在/core/json_encoder.py
)不允许NaN
值(我不知道为什么...).在此函数的return
部分中,在json.dumps()
中有allow_nan=False
参数:(((仅在生成输出文件时,该问题仅在bokeh进程的io
部分发生(它调用上面的serialize_json()
功能).
I had the same error and I debugged the problem: I had NaN
values in my plotted dataset and bokeh
's serialize_json()
function (in /core/json_encoder.py
) does not allow NaN
values (I don't know why...). In the return
part of this function there is the allow_nan=False
argument in json.dumps()
:(( The problem occurs only at the io
part of bokeh process when the output file is generated (it calls the above serialize_json()
function).
因此,您必须替换数据框中的NaN
值,例如:
So you have to replace NaN
values in your dataframe, eg.:
df = df.fillna('')
美好的一天! :)
这篇关于散景:ValueError:超出范围的浮点值不符合JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!