我必须遵循来自API的JSON(例如my_json)。实体数组存储在名为entities的键中:
{
"action" : "get",
"application" : "4d97323f-ac0f-11e6-b1d4-0eec2415f3df",
"params" : {
"limit" : [ "2" ]
},
"path" : "/businesses",
"entities" : [
{
"uuid" : "508d56f1-636b-11e7-9928-122e0737977d",
"type" : "business",
"size" : 730 },
{
"uuid" : "2f3bd4dc-636b-11e7-b937-0ad881f403bf",
"type" : "business",
"size" : 730
} ],
"timestamp" : 1499469891059,
"duration" : 244,
"count" : 2
}
我正在尝试将它们加载到数据框中,如下所示:
import pandas as pd
pd.read_json(my_json['entities'], orient='split')
我收到以下错误:
ValueError: Invalid file path or buffer object type: <type 'list'>
我已尝试过记录,但仍然无法正常工作。
答案 0 :(得分:3)
您使用my_json['entities']
的方式使其看起来像是Python dict
。
根据pandas
documentation,read_json
接收&#34;有效的JSON字符串或类似文件&#34;。您可以使用以下内容将dict
转换为json字符串:
import json
json_str = json.dumps(my_json["entities"])
您所描述的密钥"entities"
下的数据不符合orient="split"
的格式设置策略。您似乎需要使用orient="list"
:
import pandas as pd
my_json = """{
"entities": [
{
"type": "business",
"uuid": "199bca3e-baf6-11e6-861b-0ad881f403bf",
"size": 918
},
{
"type": "business",
"uuid": "054a7650-b36a-11e6-a734-122e0737977d",
"size": 984
}
]
}"""
print pd.read_json(my_json, orient='list')
得到以下特性:
entity
0 {u'type': u'business', u'uuid': u'199bca3e-baf...
1 {u'type': u'business', u'uuid': u'054a7650-b36...
或
import pandas as pd
my_json = """[
{
"type": "business",
"uuid": "199bca3e-baf6-11e6-861b-0ad881f403bf",
"size": 918
},
{
"type": "business",
"uuid": "054a7650-b36a-11e6-a734-122e0737977d",
"size": 984
}
]"""
print pd.read_json(my_json, orient='list')
得到以下特性:
size type uuid
0 918 business 199bca3e-baf6-11e6-861b-0ad881f403bf
1 984 business 054a7650-b36a-11e6-a734-122e0737977d
答案 1 :(得分:3)
如果我怀疑my_json
是字典,那么您可以跳过pd.read_json
而只是做
pd.DataFrame(my_json['entities'])
size type uuid
0 730 business 508d56f1-636b-11e7-9928-122e0737977d
1 730 business 2f3bd4dc-636b-11e7-b937-0ad881f403bf
答案 2 :(得分:1)
pd.read_json(json.dumps(b_j['entities']) , orient='list')
read_json方法接受一个字符串,所以我转储实体集合并使用它。
答案 3 :(得分:0)
根据官方documenation东方定位是“记录”
df = pd.read_json(json.dumps(b_j['entities']) , orient='records')
答案 4 :(得分:0)
由于错误的变量类型为list
,因此会引发错误。
实际上,这使您更容易将其堆叠到数据框中,因为您可以将列表直接堆叠到数据框中。 因此,您可以使用:
df = pd.DataFrame(my_json['entities'])