web-dev-qa-db-ja.com

Jsonをpandas特定の形式のDataFrameにネスト

pandassqlを実行してデータを変換し、スコアリングモデルで実行できるように、Jsonファイルの内容をpandas DataFrameの特定の形式でフォーマットする必要があります。

ファイル= C:\ scoring_model\json.js(「ファイル」の内容は以下)

{
"response":{
  "version":"1.1",
  "token":"dsfgf",
   "body":{
     "customer":{
         "customer_id":"1234567",
         "verified":"true"
       },
     "contact":{
         "email":"[email protected]",
         "mobile_number":"0123456789"
      },
     "personal":{
         "gender": "m",
         "title":"Dr.",
         "last_name":"Muster",
         "first_name":"Max",
         "family_status":"single",
         "dob":"1985-12-23",
     }
   }
 }

データフレームは次のようにする必要があります(明らかに、同じ行のすべての値は、この質問に対して可能な限り最適化しようとしました)。

version | token | customer_id | verified | email      | mobile_number | gender |
1.1     | dsfgf | 1234567     | true     | [email protected] | 0123456789    | m      |

title | last_name | first_name |family_status | dob
Dr.   | Muster    | Max        | single       | 23.12.1985

私はこのトピックに関する他のすべての質問を見て、Jsonファイルをパンダにロードするさまざまな方法を試しました

`with open(r'C:\scoring_model\json.js', 'r') as f:`
    c = pd.read_json(f.read())

 `with open(r'C:\scoring_model\json.js', 'r') as f:`
    c = f.readlines()

このソリューションでpd.Panel()を試しました Python Pandas:ソートされた辞書をデータフレームの列に分割する方法

[yo = f.readlines()]からのデータフレーム結果は、( "")に基づいて各セルのコンテンツを分割し、分割したコンテンツを異なる列に配置する方法を見つけようと考えましたが、これまでのところはうまくいきません。あなたの専門知識は大歓迎です。前もって感謝します。

28
figgy

Json全体を辞書(またはリスト)として読み込む場合json.loadを使用すると、 json_normalize

In [11]: d = {"response": {"body": {"contact": {"email": "[email protected]", "mobile_number": "0123456789"}, "personal": {"last_name": "Muster", "gender": "m", "first_name": "Max", "dob": "1985-12-23", "family_status": "single", "title": "Dr."}, "customer": {"verified": "true", "customer_id": "1234567"}}, "token": "dsfgf", "version": "1.1"}}

In [12]: df = pd.io.json.json_normalize(d)

In [13]: df.columns = df.columns.map(lambda x: x.split(".")[-1])

In [14]: df
Out[14]:
        email mobile_number customer_id verified         dob family_status first_name gender last_name title  token version
0  [email protected]    0123456789     1234567     true  1985-12-23        single        Max      m    Muster   Dr.  dsfgf     1.1
48
Andy Hayden