簡體   English   中英

在 python 中從 API 展平嵌套的 json

[英]Flatten nested json from API in python

我是 Python 的新手,我有以下嵌套 Json 格式的假期日歷

{  
      'Holiday_Calendar':'Holilday Calendar - Texas',
      'Holiday_Calendar_Group':[  
         {  
            'Holiday_Date_Time':'2019-12-25T08:00:00.000-08:00',
            'Holiday_Name':'Christmas Day'
         },
         {  
            'Holiday_Date_Time':'2019-07-04T08:00:00.000-07:00',
            'Holiday_Name':'Independence Day'
         },
         {  
            'Holiday_Date_Time':'2019-09-02T08:00:00.000-07:00',
            'Holiday_Name':'Labor Day'
         },
         {  
            'Holiday_Date_Time':'2019-05-27T08:00:00.000-07:00',
            'Holiday_Name':'Memorial Day'
         },
         {  
            'Holiday_Date_Time':'2019-01-01T08:00:00.000-08:00',
            'Holiday_Name':"New Year's Day"
         },
         {  
            'Holiday_Date_Time':'2019-11-28T08:00:00.000-08:00',
            'Holiday_Name':'Thanksgiving Day'
         }
      ]
   },
   {  
      'Holiday_Calendar':'Holilday Calendar - Kansas',
      'Holiday_Calendar_Group':[  
         {  
            'Holiday_Date_Time':'2019-12-25T08:00:00.000-08:00',
            'Holiday_Name':'Christmas Day'
         },
         {  
            'Holiday_Date_Time':'2019-11-29T08:00:00.000-08:00',
            'Holiday_Name':'Day After Thanksgiving'
         },
         {  
            'Holiday_Date_Time':'2019-07-04T08:00:00.000-07:00',
            'Holiday_Name':'Independence Day'
         },
         {  
            'Holiday_Date_Time':'2019-09-02T08:00:00.000-07:00',
            'Holiday_Name':'Labor Day'
         },
         {  
            'Holiday_Date_Time':'2019-05-27T08:00:00.000-07:00',
            'Holiday_Name':'Memorial Day'
         },
         {  
            'Holiday_Date_Time':'2019-01-01T08:00:00.000-08:00',
            'Holiday_Name':"New Year's Day"
         },
         {  
            'Holiday_Date_Time':'2019-11-28T08:00:00.000-08:00',
            'Holiday_Name':'Thanksgiving Day'
         }
      ]
   }
}

我需要得到 flatten / simple json 來創建一個 pd 數據框

我嘗試使用 json_normalize 但它似乎不起作用

abc =[]    
for index, row in result.iterrows():
        r1 = json_normalize(row['Holiday_Calendar_Group'],record_path=['Holiday_Calendar','Holiday_Calendar_Group'], meta =['Holiday_Calendar',['Holiday_Date_Time','Holiday_Name']])
        abc.append(r1)

預期結果是Holiday_Calendar, Holiday_Date_Time , Holiday_Name

result = [{   
    'Holiday_Calendar':'Holilday Calendar - Texas',
      'Holiday_Calendar_Group':[  
         {  
            'Holiday_Date_Time':'2019-12-25T08:00:00.000-08:00',
            'Holiday_Name':'Christmas Day'
         },
         {  
            'Holiday_Date_Time':'2019-07-04T08:00:00.000-07:00',
            'Holiday_Name':'Independence Day'
         },
         {  
            'Holiday_Date_Time':'2019-09-02T08:00:00.000-07:00',
            'Holiday_Name':'Labor Day'
         },
         {  
            'Holiday_Date_Time':'2019-05-27T08:00:00.000-07:00',
            'Holiday_Name':'Memorial Day'
         },
         {  
            'Holiday_Date_Time':'2019-01-01T08:00:00.000-08:00',
            'Holiday_Name':"New Year's Day"
         },
         {  
            'Holiday_Date_Time':'2019-11-28T08:00:00.000-08:00',
            'Holiday_Name':'Thanksgiving Day'
         }
      ]
   },   {  
      'Holiday_Calendar':'Holilday Calendar - Kansas',
      'Holiday_Calendar_Group':[  
         {  
            'Holiday_Date_Time':'2019-12-25T08:00:00.000-08:00',
            'Holiday_Name':'Christmas Day'
         },
         {  
            'Holiday_Date_Time':'2019-11-29T08:00:00.000-08:00',
            'Holiday_Name':'Day After Thanksgiving'
         },
         {  
            'Holiday_Date_Time':'2019-07-04T08:00:00.000-07:00',
            'Holiday_Name':'Independence Day'
         },
         {  
            'Holiday_Date_Time':'2019-09-02T08:00:00.000-07:00',
            'Holiday_Name':'Labor Day'
         },
         {  
            'Holiday_Date_Time':'2019-05-27T08:00:00.000-07:00',
            'Holiday_Name':'Memorial Day'
         },
         {  
            'Holiday_Date_Time':'2019-01-01T08:00:00.000-08:00',
            'Holiday_Name':"New Year's Day"
         },
         {  
            'Holiday_Date_Time':'2019-11-28T08:00:00.000-08:00',
            'Holiday_Name':'Thanksgiving Day'
         }
      ]
   }
]


from pandas.io.json import json_normalize
import pandas as pd

df = pd.DataFrame()    
for index, row in enumerate(result):
    temp_df = json_normalize(row['Holiday_Calendar_Group'])
    temp_df['Holiday_Calendar'] = row['Holiday_Calendar']
    df = df.append(temp_df, sort=True).reset_index(drop=True)

輸出:

print (df.to_string())
              Holiday_Calendar              Holiday_Date_Time            Holiday_Name
0    Holilday Calendar - Texas  2019-12-25T08:00:00.000-08:00           Christmas Day
1    Holilday Calendar - Texas  2019-07-04T08:00:00.000-07:00        Independence Day
2    Holilday Calendar - Texas  2019-09-02T08:00:00.000-07:00               Labor Day
3    Holilday Calendar - Texas  2019-05-27T08:00:00.000-07:00            Memorial Day
4    Holilday Calendar - Texas  2019-01-01T08:00:00.000-08:00          New Year's Day
5    Holilday Calendar - Texas  2019-11-28T08:00:00.000-08:00        Thanksgiving Day
6   Holilday Calendar - Kansas  2019-12-25T08:00:00.000-08:00           Christmas Day
7   Holilday Calendar - Kansas  2019-11-29T08:00:00.000-08:00  Day After Thanksgiving
8   Holilday Calendar - Kansas  2019-07-04T08:00:00.000-07:00        Independence Day
9   Holilday Calendar - Kansas  2019-09-02T08:00:00.000-07:00               Labor Day
10  Holilday Calendar - Kansas  2019-05-27T08:00:00.000-07:00            Memorial Day
11  Holilday Calendar - Kansas  2019-01-01T08:00:00.000-08:00          New Year's Day
12  Holilday Calendar - Kansas  2019-11-28T08:00:00.000-08:00        Thanksgiving Day

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM