ebiebievidence.com

私について  /  RSS

Python 3.6.3 の json.dumps が、np.nan をそのまま nan として出力する問題の解消

July 13, 2018

B!

目次

本記事のねらい

Python 3.6.3 における json.dumps が、 np.isnan() == True となるような値を nan として出力する問題を、外部ライブラリsimplejsonによって解決する。

問題

  • Pandas では欠落値をnp.nanとして保存する
  • これをjsonライブラリを用いて出力すると、以下の通り出力の中に「nan」が紛れ込んでしまう。 RFC8259 にもあるように、NaN は許可されない。欠落値であるならば、せめてnullとして出力されるべきだ。
[
  {
    "id": 1,
    "body": "yo",
    "parent_id": nan
  }
]

解決法

Python の標準ライブラリjsonは、simplejsonを取り込んだものである。しかし、simplejsonは標準ライブラリjsonよりも頻繁にアップデートされていて、機能・速度共に標準ライブラリに勝る。

simplejsondumpsは、ignore_nanという引数を持つ。

pip install simplejson でインストールした後、次のように書けばいい。

import numpy as np
import simplejson as json

numbers = [np.nan, 1, 2, 3]

json.dumps(numbers, ignore_nan=True)

すると、次のような結果を得る。

[null, 1, 2, 3]

私について

EbiEbiEvidence
株式会社ディー・エヌ・エーでエンジニアをしています。もっと詳しく

よかったらこの記事をシェアしてください:
B!