无法使用to_json将pandas DataFrame转换为json

时间:2014-11-08 23:34:51

标签: python json pandas

我知道Stack Overflow上有关于同一问题的其他几篇文章,但是,在这些帖子上找不到单一解决方案,或者我在网上发现的任何其他帖子都有效。我已经在熊猫上关注了大量的教程,视频,书籍和Stack Overflow帖子,所有提到的解决方案都失败了。

令人沮丧的是,我发现的所有解决方案都是正确的,或者至少它们应该是正确的;我对熊猫很新,所以我唯一的结论就是我可能做错了。

以下是我开始使用的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系列或DataFrame可以转换为有效的JSON字符串。"

无论如何,我尝试给它一个字符串,它导致完全相同的错误。

我已经尝试创建测试场景,遵循书籍和其他教程和/或帖子中的确切步骤,它只会导致相同的错误。此时,我需要一个简单的解决方案。我愿意接受建议,但我必须强调,我没有时间浪费在学习一个全新的图书馆。

2 个答案:

答案 0 :(得分:5)

首次尝试时,正确的字符串为'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}]

答案 1 :(得分:0)

事实证明,问题在于我自己的愚蠢错误。在测试我对to_json的使用时,我将一个示例复制并粘贴到我的代码中并从那里开始。想到我已经注释掉了这段代码,我继续尝试使用to_json和我的测试数据。原来我收到的错误是从我复制和粘贴的示例代码中抛出的。一旦我删除了所有内容并使用我的测试数据重新编写它就可以了。

但是,正如user667648(Bair)指出的那样,我的代码中还有另一个错误。 orient param被认为是orient = 'records'而不是orient = 'record'