【问题标题】:Python // Pandas - Get json from API and turn into dataframePython // Pandas - 从 API 获取 json 并转换为数据框
【发布时间】:2017-10-03 04:33:35
【问题描述】:

我正在使用这个 API 来获取公司数据:https://github.com/vkruoso/receita-tools

在这里你可以看到注册表是如何来到我这里的(它看起来是一个 json 结构):https://www.receitaws.com.br/v1/cnpj/27865757000102

我可以使用以下方式下载它:

cadastro = os.system("curl -X GET https://www.receitaws.com.br/v1/cnpj/27865757000102"

如果我运行type(cadastro),它会向我显示class 'int'。 我想把它变成一个数据框。我怎么能这样做?

【问题讨论】:

  • 打印出来会是什么样子?

标签: python json pandas get


【解决方案1】:

os.system 返回退出代码而不是数据。您应该改用子流程,请参阅Assign output of os.system to a variable and prevent it from being displayed on the screen

如果你使用python 3.5+,你应该使用subprocess.run()

import subprocess
import json
import pandas as pd

proc = subprocess.run(["curl",  "-X", "GET",  
                  "https://www.receitaws.com.br/v1/cnpj/27865757000102"],
                   stdout=subprocess.PIPE, encoding='utf-8')

cadastro = proc.stdout
df = pd.DataFrame([json.loads(cadastro)])

否则,请使用subprocess.Popen()

import subprocess
import json
import pandas as pd

proc = subprocess.Popen(["curl",  "-X", "GET",  
                  "https://www.receitaws.com.br/v1/cnpj/27865757000102"],
                   stdout=subprocess.PIPE)

cadastro, err = proc.communicate()
df = pd.DataFrame([json.loads(cadastro)])

或者,您可以使用Requests library

import json
import requests
import pandas as pd

response = requests.get("https://www.receitaws.com.br/v1/cnpj/27865757000102")
data = json.loads(response.content.decode(response.encoding))
df = pd.DataFrame([data])

【讨论】:

  • 尝试使用子进程,但没有成功。请求运行良好,但我将不得不花一些时间调整数据框中的数据。
猜你喜欢
  • 1970-01-01
  • 2023-02-17
  • 2017-03-10
  • 2019-05-14
  • 2021-09-27
  • 1970-01-01
  • 2013-09-12
  • 2021-07-13
  • 2019-07-01
相关资源
最近更新 更多