首页 > 解决方案 > 从带有列的 json 响应创建数据框(all_urls、描述、名称、价格)

问题描述

下面给出的字典数据我想获取列名“all_urls”、“description”、“name”、“price”的数据框。

{
     "all_urls":["http://url1.com","http://url2.com", "http://url3.com"],
     "known":[{"description":"Decription here",
               "name":"Product nam",
                "price":20,
                "url":"http://url1.com"},
              {"description":"Decription here",
               "name":"Product name",
               "price":50,       
               "url":"http://url2.com"}
             ]}
}

{
    "all_urls":["http://url21.com","http://url22.com", "http://url23.com"],
     'known': []

}

标签: python-3.x

解决方案


我将首先创建一个仅包含您需要的值的新字典,然后使用pandas.DataFrame.from_dict方法进行转换。

import pandas as pd

data = { 
     "all_urls":["http://url1.com","http://url2.com", "http://url3.com"],
     "known":[{"description":"Decription here",
               "name":"Product nam",
                "price":20,
                "url":"http://url1.com"},
              {"description":"Decription here",
               "name":"Product name",
               "price":50,    
               "url":"http://url2.com"}
             ]}


parsed_data = { "all_urls":data["all_urls"],
                "description":[i["description"] for i in data["known"]],
                "name":[i["name"] for i in data["known"]],
                "price":[i["price"] for i in data["known"]] }

data_as_df = pd.DataFrame.from_dict(parsed_data,orient="index")

print(data_as_df)

输出

                           0                1                2
all_urls     http://url1.com  http://url2.com  http://url3.com
description  Decription here  Decription here             None
name             Product nam     Product name             None
price                     20               50             None

对于解析,我使用列表理解来简化。我希望它是你想要的格式。


推荐阅读