gpt4 book ai didi

python - Pandas to_json 不为 NaT 输出 null

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:19 24 4
gpt4 key购买 nike

我正在使用 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'

最佳答案

有点hacky,但你可以做到这一点

 In [13]: s = Series(pd.to_datetime(['20130101',None]))

In [14]: s
0 2013-01-01 00:00:00
1 NaT
dtype: datetime64[ns]

In [15]: def f(x):
if isnull(x):
return 'null'
return x.isoformat() ....:

In [16]: s.apply(f).to_json()

Out[16]:
'{"0":"2013-01-01T00:00:00","1":"null"}'

关于python - Pandas to_json 不为 NaT 输出 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com