2014-11-08 1 views
3

Я знаю, что есть несколько других сообщений в Stack Overflow относительно этой же проблемы, однако ни одного решения, найденного на этих сообщениях, или любого другого сообщения, которое я нашел в Интернете для что дело, сработало. Я следил за многочисленными учебниками, видеороликами, книгами и сообщениями Stack Overflow на пандах, и все упомянутые решения потерпели неудачу.Невозможно преобразовать pandas DataFrame в json using to_json

Неудача заключается в том, что все решения, которые я нашел, являются правильными или, по крайней мере, они должны быть; Я довольно новичок в пандах, поэтому мой единственный вывод заключается в том, что я, вероятно, что-то делаю неправильно.

Это документация к pandas, которую я начал с: Pandas to_json Doc. Я не могу заставить pandas to_json преобразовать pandas DataFrame в json-объект или json-строку.

В принципе, я хочу преобразовать строку csv в DataFrame, а затем преобразовать этот DataFrame в json-объект или json-строку (мне все равно, какой). Потом, когда у меня есть структура данных JSON, я собираюсь привязать его к гистограмме D3.js

Вот пример того, что я пытаюсь сделать:

# Declare my csv string (Works): 
csvStr = '"pid","dos","facility","a1c_val"\n"123456","2013-01-01 13:37:00","UOFU",5.4\n"65432","2014-01-01 14:32:00","UOFU",5.8\n"65432","2013-01-01 13:01:00","UOFU",6.4' 
print (csvStr) # Just checking the variables contents 

# Read csv and convert to DataFrame (Works): 
csvDf = pandas.read_csv(StringIO.StringIO(csvStr)) 
print (csvDf) # Just checking the variables contents 

# Convert DataFrame to json (Three of the ways I tried - None of them work): 
myJSON = csvDf.to_json(path_or_buf = None, orient = 'record', date_format = 'epoch', double_precision = 10, force_ascii = True, date_unit = 'ms', default_handler = None) # Attempt 1 
print (myJSON) # Just checking the variables contents 

myJSON = csvDf.to_json() # Attempt 2 
print (myJSON) # Just checking the variables contents 

myJSON = pandas.io.json.to_json(csvDf) 
print (myJSON) # Just checking the variables contents 

ошибку, Я получаю:

аргумент 1 должен быть строкой или только для чтения символов буфера, не DataFrame

который вводит в заблуждение, потому что документация говорит «A Series или DataFrame с преобразуется в действительную строку JSON. "

Несмотря ни на что, я попытался дать ему строку в любом случае, и это привело к той же ошибке.

Я попытался создать тестовый сценарий, следуя точным шагам из книг и других учебных пособий и/или сообщений, и это просто приводит к той же ошибке. На этом этапе мне нужно простое решение как можно скорее. Я открыт для предложений, но я должен подчеркнуть, что у меня нет времени тратить на изучение совершенно новой библиотеки.

ответ

3

Для вас с первой попытки, правильная строка 'records' не 'record' Это работает для меня:

myJSON = csvDf.to_json(path_or_buf = None, orient = 'records', date_format = 'epoch', double_precision = 10, force_ascii = True, date_unit = 'ms', default_handler = None) # Attempt 1 

печать дает:

[{"pid":123456,"dos":"2013-01-01 13:37:00","facility":"UOFU","a1c_val":5.4}, 
{"pid":65432,"dos":"2014-01-01 14:32:00","facility":"UOFU","a1c_val":5.8}, 
{"pid":65432,"dos":"2013-01-01 13:01:00","facility":"UOFU","a1c_val":6.4}] 
+0

Большое спасибо за ваш ответ! Вы абсолютно правы, ориентационный парам должен быть «записями»! Спасибо, что поймал эту ошибку. Если бы не другая проблема ранее в моем коде (не размещена здесь), это решение устранило бы проблему. Оказывается, ошибка была вызвана моей собственной глупой ошибкой в ​​результате копирования/вставки. Я отправлю детали как ответ на мой вопрос.Хотя, я собираюсь отметить ваш ответ как «полезный», потому что ваше решение действительно для ошибки в моем коде. Edit: Nevermind, я не могу голосовать за ваш пост, потому что у меня недостаточно репутации. –

+0

Нет проблем. Удачи! – Dair

0

Оказывается, что проблема была becuase моей собственной глупый ошибка. Проверяя мое использование to_json, я копирую и вставляю пример в свой код и ушел оттуда. Думая, что я прокомментировал этот код, я приступил к использованию to_json с моими тестовыми данными. Оказывается, ошибка, которую я получал, выкидывалась из кода примера, который был у меня скопирован и вставлен. Как только я удалил все и переписал его, используя мои тестовые данные, он сработал.

Однако, как указал user667648 (Bair), в моем коде была еще одна ошибка. Предполагалось, что параметр orient должен быть orient = 'records' и NOT orient = 'record'.

Смежные вопросы