Pandas read_json()失败,只有一个简单的JSON字符串

时间:2018-02-03 01:17:09

标签: python json pandas dataframe

我正在尝试从json字符串(而不是文件)创建DataFrame对象:

json_string = "[{'code': '8', 'name': 'Human'}, {'code': '11', 'name': 'Orc'}]"
df = pd.read_json(json_string)

但是这种方法会导致以下错误:

ValueError: Expected object or value

documentation让听起来像是可能的:

  

pandas。 read_json path_or_buf = None,orient = None,typ ='frame',dtype = True,convert_axes = True,convert_dates = True,keep_default_dates = True,numpy = False ,precise_float = False,date_unit = None,encoding = None,lines = False,chunksize = None,compression ='推断'

     

将JSON字符串转换为pandas对象

     
      
  • path_or_buf :有效的JSON字符串或类文件,默认值:   字符串可以是URL。有效的URL方案包括http,ftp,s3和file。对于文件URL,需要主机。例如,本地文件可以是file://localhost/path/to/table.json
  •   

我已经尝试使用orient的几个组合调用该方法,但没有成功。有关如何完成此任务的任何提示?

我真的不希望将我的字符串保存到文件以便能够成功使用read_json()

1 个答案:

答案 0 :(得分:5)

您可以使用eval来评估要字典的字符串,然后直接传递给DataFrame构造函数。

>>> import pandas as pd
>>> pd.DataFrame(eval("[{'code': '8', 'name': 'Human'}, {'code': '11', 'name': 'Orc'}]"))

    code   name
0   8      Human
1   11     Orc

同样,您也可以使用ast.literal_eval代替eval

>>> import ast
>>> pd.DataFrame(ast.literal_eval("[{'code': '8', 'name': 'Human'}, {'code': '11', 'name': 'Orc'}]"))

    code   name
0   8      Human
1   11     Orc