json 如何将API响应格式转换为Pandas Dataframe?

2cmtqfgy  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(200)

我有这个代码,使用它我能够从API下载数据.但我不知道如何将其转换为pandas Dataframe 。

import requests
import json

url = "https://statdb.luke.fi:443/PxWeb/api/v1/en/LUKE/02 Maatalous/04 Tuotanto/06 Lihantuotanto/02 Kuukausitilastot/02_Lihantuotanto_teurastamoissa_kk.px"

payload = json.dumps({
  "query": [
    {
      "code": "Muuttuja",
      "selection": {
        "filter": "item",
        "values": [
          "Lihantuotanto"
        ]
      }
    },
    {
      "code": "Laji",
      "selection": {
        "filter": "item",
        "values": [
          "Lehmät"
        ]
      }
    }
  ],
  "response": {
    "format": "csv"
  }
})
headers = {
  'Content-Type': 'application/json',
  'Cookie': 'rxid=710a361a-7044-494f-95b7-15261822712c'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

该代码返回文本格式的数据。我需要关于如何使用此输出制作pandas数据框的指导。
对于此特定数据框,列标题为
“月”
“变量”,
“奶牛7)8)”
如此等等。

ccgok5k5

ccgok5k51#

您可以使用StringIO模拟一个类似文件的对象,然后从它创建一个pd.DataFrame。此外,第一列()中有一些奇怪的符号,我希望您不需要。因此,请确保也重命名第一列。

import requests
import json
import pandas as pd
from io import StringIO

url = "https://statdb.luke.fi:443/PxWeb/api/v1/en/LUKE/02 Maatalous/04 Tuotanto/06 Lihantuotanto/02 Kuukausitilastot/02_Lihantuotanto_teurastamoissa_kk.px"

payload = json.dumps({   "query": [
    {
      "code": "Muuttuja",
      "selection": {
        "filter": "item",
        "values": [
          "Lihantuotanto"
        ]
      }
    },
    {
      "code": "Laji",
      "selection": {
        "filter": "item",
        "values": [
          "Lehmät"
        ]
      }
    }   ],   "response": {
    "format": "csv"   } })

headers = {   'Content-Type': 'application/json',   'Cookie': 'rxid=710a361a-7044-494f-95b7-15261822712c' }

response = requests.request("POST", url, headers=headers, data = payload)

# Create StringIO object to mimic file-like object
content_file = StringIO(response.text)

# Create pd.DataFrame
df = pd.read_csv(content_file)

# Clean column name
df.rename(columns = {'"Month"': 'Month'}, inplace = True)

print(df.head())

相关问题