Я использую Pandas 0.12.0 и вижу некоторое поведение, которое противоречит документам при преобразовании серии или dataframe в json.Pandas to_json не выводит null для NaT
Если создать серию с несколькими датами, которые включают нулевые значения, я получаю что-то вроде этого:
>>> 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 не должны быть представлены как ноль.
Если я затем вывожу to_json, я получу нуль для третьей записи, как и ожидалось.
>>> s.to_json()
'{"0":1383840647530771000,"1":1383840647530782000,"2":null}'
Однако, мне нужно, чтобы убедиться, что тип данных datetime64 [нс] для некоторых других вычислений, так что я преобразовать поля 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]
Нет теперь NaT, который является последовательным и ожидаемым. Затем я пытаюсь вывести json снова, я получаю отрицательное значение для значения NaT вместо нулевого, которое я ожидал.
>>> t.to_json()
'{"0":1383840647530771000,"1":1383840647530782000,"2":-9223372036854775808}'
Это становится еще хуже, при использовании формата изо, поскольку он пытается форматировать дату, но большинство парсеров не могут понять, как обрабатывать даты выхода, и это навлекает все виды опустошения вниз линии.
>>> 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"}'
Любые мысли о том, как я должен действовать здесь? Благодаря!
EDIT:
Похоже, это проблема с строковым представлением pandas.NaT?
>>> str(pandas.NaT)
'0001-255-255 00:00:00'
FWIW I не может воспроизвести это в багажнике, которое я сегодня вытащил; Я получаю '' {"0": 1383841824833, "1": 1383841824833, "2": null} 'и '' {" 0 ":" 2013-11-07T16: 30: 24.833Z "," 1 ": "2013-11-07T16: 30: 24.833Z", "2": null} '', соответственно. – DSM
iirc это было исправлено на раннем этапе dev для 0,13. 0.13 rc выходит в начале следующей недели/u может попробовать мастер, чтобы подтвердить, что он исправлен. в качестве альтернативы вы можете выполнить строчку перед передачей to_json – Jeff
Подтверждено, что это исправлено в багажнике/0.13, спасибо, ребята. Я сделал быстрый поиск в списке проблем, но не нашел этого.Джефф, я попробую ваше хакерское обходное решение, пока не будет выпущено 0,13. – brandon