APIから取得したJSON(my_jsonなど)に従う必要があります。エンティティの配列はエンティティと呼ばれるキーに保存されます:
{
"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'>
レコードのオリエンテーションを試しましたが、それでも機能しません。
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
my_json['entities']
の使用方法により、Python dict
のように見えます。
pandas
documentation によると、read_json
は「有効なJSON文字列またはファイルのような」を受け取ります。次のようにして、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
ダニエルコリンは私を正しい方向に向けました。私はしなければならなくなった:
pd.read_json(json.dumps(b_j['entities']) , orient='list')
Read_jsonメソッドは文字列を取るため、エンティティコレクションをダンプして使用します。
公式によると documentation オリエントは「レコード」であるはずです
df = pd.read_json(json.dumps(b_j['entities']) , orient='records')