web-dev-qa-db-ja.com

JSONをPandasにインポートする

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'>

レコードのオリエンテーションを試しましたが、それでも機能しません。

13
MoreScratch

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
9
piRSquared

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
3
Daniel Corin

ダニエルコリンは私を正しい方向に向けました。私はしなければならなくなった:

pd.read_json(json.dumps(b_j['entities']) , orient='list')

Read_jsonメソッドは文字列を取るため、エンティティコレクションをダンプして使用します。

1
MoreScratch

公式によると documentation オリエントは「レコード」であるはずです

df = pd.read_json(json.dumps(b_j['entities']) , orient='records')
0
Avi Gaur