我正在使用 Pandas 0.12.0 并且在将系列或数据帧转换为 json 时看到一些与文档相矛盾的行为。
如果我创建一个包含几个包含空值的日期的系列,我会得到如下信息:
>>> 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,我会得到第三个条目的空值,如预期的那样。
>>> 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,我得到 NaT 值的负值,而不是我期望的 null。
>>> 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'