Python // Pandas - 从API获取json并转换为数据帧

时间:2017-10-03 04:33:35

标签: python json pandas get

我正在使用此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'。 我想把它变成一个数据帧。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

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])