代码之家  ›  专栏  ›  技术社区  ›  M.Ali

将API响应转换为数据帧

  •  0
  • M.Ali  · 技术社区  · 4 年前

    req = urllib.request.Request(url, body, headers)
    
    try:
        response = urllib.request.urlopen(req)
        string = response.read().decode('utf-8')
        json_obj = json.loads(string)
    

    返回以下内容:

    {"forecast": [17.588294043898163, 17.412641963452206], 
        "index": [
                {"SaleDate": 1629417600000, "Type": "Type 1"}, 
                {"SaleDate": 1629504000000, "Type": "Type 2"}
            ]
    }
    

    Forecast                 SaleDate     Type
    17.588294043898163       2021-08-16   Type 1
    17.412641963452206       2021-08-17   Type 1
    
    3 回复  |  直到 4 年前
        1
  •  1
  •   mozway    4 年前

    您可以使用以下命令。它使用 pandas.Series 将字典转换为列和 pandas.to_datetime

    d = {"forecast": [17.588294043898163, 17.412641963452206], 
        "index": [
                {"SaleDate": 1629417600000, "Type": "Type 1"}, 
                {"SaleDate": 1629504000000, "Type": "Type 2"}
            ]
    }
    
    df = pd.DataFrame(d)
    df = pd.concat([df['forecast'], df['index'].apply(pd.Series)], axis=1)
    df['SaleDate'] = pd.to_datetime(df['SaleDate'], unit='ms')
    

    输出:

        forecast   SaleDate    Type
    0  17.588294 2021-08-20  Type 1
    1  17.412642 2021-08-21  Type 2
    
        2
  •  1
  •   sushanth    4 年前

    list comprehension 将数据展平。

    import pandas as pd
    
    flatten = [
        {"forecast": j, **resp['index'][i]} for i, j in enumerate(resp['forecast'])
    ]
    
    pd.DataFrame(flatten)
    

        forecast       SaleDate    Type
    0  17.588294  1629417600000  Type 1
    1  17.412642  1629504000000  Type 2