代码之家  ›  专栏  ›  技术社区  ›  user96564

复杂的json到pandas数据帧

  •  0
  • user96564  · 技术社区  · 6 年前

    关于json-to-pandas数据框架有很多问题,但都没有解决我的问题。我正在练习这个复杂的JSON文件,它看起来像这样

    {
      "type" : "FeatureCollection",
      "features" : [ {
        "Id" : 265068000,
        "type" : "Feature",
        "geometry" : {
          "type" : "Point",
          "coordinates" : [ 22.170376666666666, 65.57273333333333 ]
        },
        "properties" : {
          "timestampExternal" : 1529151039629
        }
      }, {
        "Id" : 265745760,
        "type" : "Feature",
        "geometry" : {
          "type" : "Point",
          "coordinates" : [ 20.329506666666667, 63.675425000000004 ]
        },
        "properties" : {
          "timestampExternal" : 1529151278287
        }
      } ]
    }
    

    我想使用 pd.read_json() 我的主要目标是提取ID、坐标和TimestampExternal。因为这是非常复杂的JSON,通常 pd.read_json()。 ,只是不能给出正确的输出。你能给我建议吗,在这种情况下我该如何解决呢?预期输出如下

    Id,Coordinates,timestampExternal
    265068000,[22.170376666666666, 65.57273333333333],1529151039629
    265745760,[20.329506666666667, 63.675425000000004],1529151278287
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   Amey Dahale    6 年前

    您可以阅读JSON将其加载到字典中。然后,使用字典理解,提取所需的属性作为列-

    import json
    import pandas as pd
    
    _json = json.load('/path/to/json')
    df_dict = [{'id':item['Id'], 'coordinates':item['geometry']['coordinates'], 
                'timestampExternal':item['properties']['timestampExternal']} for item in _json['features']]
    
    extracted_df = pd.DataFrame(extracted_df)
    
    >>>
                                   coordinates             id   timestampExternal
    0   [22.170376666666666, 65.57273333333333]     265068000   1529151039629
    1   [20.329506666666667, 63.675425000000004]    265745760   1529151278287 
    
        2
  •  1
  •   Stephen Rauch ajay singh koranga    6 年前

    您可以直接读取JSON,然后给出 features 以听写方式排列熊猫:

    代码:

    import json
    
    with open('test.json', 'rU') as f:
        data = json.load(f)
    
    df = pd.DataFrame([dict(id=datum['Id'],
                            coords=datum['geometry']['coordinates'],
                            ts=datum['properties']['timestampExternal'],
                            )
                       for datum in data['features']])
    print(df)
    

    结果:

                                         coords         id             ts
    0   [22.170376666666666, 65.57273333333333]  265068000  1529151039629
    1  [20.329506666666667, 63.675425000000004]  265745760  1529151278287