【问题标题】:Nested JSON to Pandas Dataframe in python在python中将JSON嵌套到Pandas Dataframe
【发布时间】:2018-05-09 14:25:03
【问题描述】:

我正在尝试将嵌套的 JSON 数据转换为 pandas 数据框。我知道这里有很多关于这个的材料,但我似乎仍然无法让它发挥作用。 如您所见,我创建了一个数据框,目的是仅获取某些数据(卧室、价格、大小、经度、纬度)。

感谢任何帮助。

代码如下:

import json
import requests
import datetime
import pandas as pd
from pandas.io.json import json_normalize
from urllib.request import urlopen
import json
import urllib.request, json 

end_page = 42

df = pd.DataFrame()#columns='Bedrooms','Price','Size','Longitude','Latitude')

for page in range(1,end_page+1):

    with urllib.request.urlopen("https://www.rentfaster.ca/api/search.json?proximity_type=location-city&novacancy=0&city_id=" + str(page)) as url:

        data = json.loads(url.read().decode())


        for x in data['listings']:
            for y in x['bedrooms'] and x['sq_feet']:
                print(y)

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    您发出的请求没有“大小”属性。数据中的属性是:

    ['address', 'address_hidden', 'availability', 'avdate', 'baths',
           'bedrooms', 'cats', 'city', 'community', 'den', 'dogs', 'email', 'id',
           'intro', 'latitude', 'link', 'location', 'longitude', 'marker', 'phone',
           'phone_2', 'preferred_contact', 'price', 'province', 'quadrant',
           'ref_id', 'rented', 'slide', 'sq_feet', 'status', 'thumb', 'thumb2',
           'title', 'type', 'userId', 'utilities_included', 'website']
    

    除此之外,我的工作方式是创建一个临时数据框,然后删除所有不在命名列表中的列。代码如下:

        import json
        import requests
        import datetime
        import pandas as pd
        from pandas.io.json import json_normalize
        from urllib.request import urlopen
        import json
        import urllib.request, json
    
    end_page = 42
    
    columns_list = ['bedrooms','price','longitude','latitude']
    
    df = pd.DataFrame(data=None, columns=columns_list)
    
    for page in range(0,10):
    
        with urllib.request.urlopen("https://www.rentfaster.ca/api/search.json?proximity_type=location-city&novacancy=0&city_id=" + str(page)) as url:
    
            data = json.loads(url.read().decode())
    
            for entry in range(0, len(data['listings'])):
                df_temp = pd.DataFrame([data['listings'][entry]])
                df_temp = df_temp[columns_list]
                df = df.append(df_temp)
    

    如果您还想收集属性“size”,则需要将“sq_feet”添加到要保留的列列表中。

    请注意,for 循环当前仅从 0-10 运行,因为之后它会失败,我相信是因为列表不包含您正在寻找的所有属性。这可以通过清理输入来解决。

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 2018-09-01
      • 2019-06-09
      • 2022-01-07
      • 2021-12-29
      相关资源
      最近更新 更多