web-dev-qa-db-ja.com

ボケ:ValueError:範囲外のfloat値はJSONに準拠していません

私はこの議論に出くわしました(1年前から): https://github.com/bokeh/bokeh/issues/2392

また、エラーなしで白い画面が表示されました。次に、2列の小さなサブセットを取得して、以下を試しました。

pandasは、そこにも空のデータを含む行の束を取得するだけなので、dropnaを試しました。これにより、データがまったくなくなりました。代わりに、移動する行を指定しました。 dfに(したがって、df = df.head(n=19)行)

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

また、出力ファイルも生成されません(したがって?)。この小さなサブセットのこのエラーを取り除くにはどうすればよいですか? NaN値と関係がありますか?それはまた、より大きなデータセットの「死の白い画面」の問題を解決しますか?

見てくれてありがとうvm!

エラー全体を確認したい場合:

---------------------------------------------------------------------------
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
11
spiff

同じエラーが発生し、問題をデバッグしました。プロットされたデータセットにNaN値があり、bokehserialize_json()関数(_/core/json_encoder.py_内)では許可されていませんNaN値(理由はわかりません...)。この関数のreturn部分では、json.dumps()に_allow_nan=False_引数があります:((問題は、ボケプロセスのio部分でのみ発生します。出力ファイルが生成されます(上記のserialize_json()関数を呼び出します)。

したがって、データフレーム内のNaN値を置き換える必要があります。例:

_df = df.fillna('')
_

いい日! :)

7
ragesz

NaNのサポートは、バイナリ配列のシリアル化オプションを追加するための このプルリクエスト がマージされた場合に、より適切にサポートされます。これは、2017年1月にBokeh 0.12.4で利用可能になるはずです。Bokehはpython JSONエンコーダーでallow_nanを使用しません。これは、標準ではないためです— naninfは公式のJSON仕様の一部ではありません(ひどい監視IMOですが、私たちの管理外です)

4
bigreddot

ええと、それはあなたの質問に対する正確な答えではありません。それは、ボケを1週間使った私の経験のようなものです。私の場合、ボケからテキサスの例のようなプロットを作成しようとしています.....多くの欲求不満の後、NaNとしてプロットされるリストの最初の値(myList)に遭遇すると、ボケやjsonなどに気づきました。それはメッセージを与えることを計画することを拒否します

ValueError: Out of range float values are not JSON compliant

リストの最初の値(myList [0])をfloatに変更すると、他の位置へのNaNが含まれている場合でも正常に機能します。これを考慮に入れて、これらのものがどのように機能するかを理解している誰かが答えを提案します。私は、最初の値がnanにならないように、データを再構築することです。

私はこの問題にぶつかり、データフレームの1つの列がNaNのみで埋められていたために発生していることに気付きました。

代わりに、別の値に設定することもできます。例:

df['column'] = np.zeros(len(df))
0
Michele

NAN値を削除した後、無限の値が存在する可能性があります。データセット全体をトレースすると、infが何らかの方法でそれらの無限の値を削除すると、機能するはずです。

df['column'].describe()

次に、inf値が見つかった場合は、次の行を削除します。

df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]

参照: ここでの解決策

0
id101112