【问题标题】:How do I put an API request into a pandas dataframe?如何将 API 请求放入 pandas 数据框中?
【发布时间】:2018-10-04 13:34:32
【问题描述】:

我正在尝试将来自 NHTSA 的开源 API 拉取转换为最终进入数据框并转换为 csv。我收到错误 TypeError: data argument can't be an iterator.

这是代码...不需要密码。

import requests, json;
import pandas as pd;
import io;

url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/';
post_fields = {'format': 'csv', 'data':'1HD1JBB433Y031504;1HD1FB4138Y670512;JH2RC44553M701813;JYAVN01EX9A001399'};
r = requests.get(url, data=post_fields);
df = pd.DataFrame(io.StringIO(r.text))

感谢任何可以提供帮助的人。

【问题讨论】:

  • 如果 API 返回 json,请尝试 df = pd.DataFrame(json.loads(r.text))。另外,请执行if r.status_code == 200 检查以检查 API 是否返回了有效的内容。
  • 我检查了你的例子,A​​PI返回一个status_code 405,所以你的API请求不正确。

标签: python-3.x pandas python-requests


【解决方案1】:

回答你原来的问题:

对于 csv,它是这样工作的

import requests
import pandas as pd
import io
url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/'
post_fields = {'format': 'csv', 'data':'1HD1JBB433Y031504;1HD1FB4138Y670512;JH2RC44553M701813;JYAVN01EX9A001399'}
r = requests.post(url, data=post_fields)

pd.read_csv(io.StringIO(r.text), sep=',')

【讨论】:

    【解决方案2】:

    所以我想通了!谢谢@576i。

    import requests, json;
    import pandas as pd;
    import io;
    
    url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/';
    post_fields = {'format': 'json', 'data':'1HD1JBB433Y031504;1HD1FB4138Y670512;JH2RC44553M701813;JYAVN01EX9A001399'};
    r = requests.post(url, data=post_fields);
    x = r.json()
    
    df = pd.DataFrame(x['Results'])
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 2021-01-04
      • 2021-12-31
      • 2021-01-12
      • 2020-04-11
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多