Как мне преобразовать это JSON в таблицу (с Python)? - PullRequest
0 голосов
/ 10 января 2020

У меня есть JSON, который выглядит следующим образом:

{ 
"data":{ 
"page_posts_count":{ 
"title":"Number of posts",
"value":9.0,
"formatted_value":"9"
},
"page_posts_per_day":{ 
"title":"Posts per day",
"value":0.32142857142857145,
"formatted_value":"0.3"
},
"page_posts_likes_count":{ 
"title":"Number of Likes",
"value":1558278.0,
"formatted_value":"1.6M"
},
"page_posts_comments_count":{ 
"title":"Number of Comments",
"value":173440.0,
"formatted_value":"173k"
},
"page_posts_shares_count":{ 
"title":"Number of Shares",
"value":78203.0,
"formatted_value":"78k"
},
"metadata":{ 
"version":"v1",
"profile_id":"6815841748",
"profile_name":"Barack Obama",
"token":"abcdefghijklmnopqrstuvwxyz",
"date_from":"Fri Dec 13 00:00:00 UTC 2019",
"date_until":"Thu Jan 09 23:59:59 UTC 2020",
"message":"No Insights returned.",
"network":"facebook",
"task":"kpi"
}
}

Когда я пытаюсь выполнить json_normalize, они выдают мне следующую ошибку:

 if any([isinstance(x, dict) for x in y.values()] for y in data):
          AttributeError: 'str' object has no attribute 'values'

И мой фрейм данных заканчивается выглядит так:

                          Data                                                          Metadata
page_posts_count     { "title":"Number of posts", "value":9.0, "formatted_value":"9" }   nan

Но мне нужно что-то вроде этого:

title              value       formatted_value
Number of posts    9.0            9

Мне даже не нужна часть метаданных.

Так что некоторые идеи буду признателен.

Спасибо!

1 Ответ

0 голосов
/ 10 января 2020

Вы можете использовать from_dict метод pandas, такой как:

tmp = { 
    "data": { 
        "page_posts_count":{ 
        "title":"Number of posts",
        "value":9.0,
        "formatted_value":"9"
        },
        "page_posts_per_day":{ 
        "title":"Posts per day",
        "value":0.32142857142857145,
        "formatted_value":"0.3"
        },
        "page_posts_likes_count":{ 
        "title":"Number of Likes",
        "value":1558278.0,
        "formatted_value":"1.6M"
        },
        "page_posts_comments_count":{ 
        "title":"Number of Comments",
        "value":173440.0,
        "formatted_value":"173k"
        },
        "page_posts_shares_count":{ 
        "title":"Number of Shares",
        "value":78203.0,
        "formatted_value":"78k"
        },
        "metadata":{ 
        "version":"v1",
        "profile_id":"6815841748",
        "profile_name":"Barack Obama",
        "token":"abcdefghijklmnopqrstuvwxyz",
        "date_from":"Fri Dec 13 00:00:00 UTC 2019",
        "date_until":"Thu Jan 09 23:59:59 UTC 2020",
        "message":"No Insights returned.",
        "network":"facebook",
        "task":"kpi"
        }
    }
}
del tmp['data']['metadata'] # you don't need metadata

df = pd.DataFrame.from_dict(tmp['data'])

, который дает:

dataframe

...