Pandas 0.12.0 を使用していますが、シリーズまたはデータフレームを json に変換するときにドキュメントと矛盾する動作が見られます。
null 値を含むいくつかの日付を含むシリーズを作成すると、次のようになります。
>>> s = pandas.Series(data=[datetime.datetime.now(), datetime.datetime.now(), None])
>>> s
0 2013-11-07 16:10:47.530771
1 2013-11-07 16:10:47.530782
2 None
dtype: object
http://pandas.pydata.org/pandas-docs/dev/io.html#writing-jsonによると、json に変換すると、None、NaT、NaN の値は null として出力されるはずです。
次に to_json を出力すると、予想どおり、3 番目のエントリで null が返されます。
>>> s.to_json()
'{"0":1383840647530771000,"1":1383840647530782000,"2":null}'
ただし、他の計算ではデータ型が datetime64[ns] であることを確認する必要があるため、次のように Pandas でフィールドを datetime に変換します。
>>> t = pandas.to_datetime(s)
>>> t
0 2013-11-07 16:10:47.530771
1 2013-11-07 16:10:47.530782
2 NaT
dtype: datetime64[ns]
None は NaT になりました。これは一貫性があり、期待されています。次に、json を再度出力しようとすると、期待していた null ではなく、NaT 値に負の値が返されます。
>>> t.to_json()
'{"0":1383840647530771000,"1":1383840647530782000,"2":-9223372036854775808}'
日付をフォーマットしようとするため、iso フォーマットを使用するとさらに悪化しますが、ほとんどのパーサーは出力日付を処理する方法を理解できず、これによりあらゆる種類の混乱が発生します。
>>> t.to_json(date_format='iso')
'{"0":"2013-11-07T16:10:47.530771","1":"2013-11-07T16:10:47.530782","2":"0001-255-255T00:00:00"}'
ここでどのように進めるべきかについて何か考えはありますか? ありがとう!
編集:
これは pandas.NaT の文字列表現に問題があるように見えますか?
>>> str(pandas.NaT)
'0001-255-255 00:00:00'