将 URL 请求从 JSON 转换为 Pandas DataFrame

Convert URL Request from JSON to Pandas DataFrame

我已经尝试了一些关于请求数据和将数据从请求转换为 pandas 数据帧的教程,但是当它被转换为 pandas 数据帧时,它没有显示任何数据。请看下面。

尝试 1

首先,检查 URL 的 200 状态:

import requests
query = "https://data.epa.gov/efservice/PUB_DIM_FACILITY/ROWS/0:10/JSON"
response = requests.get(query)
print(response.status_code)
>>> 200

其次,查看请求内容。看起来不错,因为从 JSON 格式的 url 中提取了多行数据。

s=requests.get(query).content
print(s)
>>> b'[{"FACILITY_ID":1000001,"LATITUDE":48.828707,"LONGITUDE":-122.685533,"CITY":"FERNDALE"

最后,将 s 请求 JSON 数据转换为 Pandas Dataframe。

然而,这不起作用。

dataframe=pd.read_csv(io.StringIO(s.decode('utf-8')), encoding='utf-8', error_bad_lines=False)
dataframe.head()
>>> 0 rows × 459 columns

尝试 2

import pandas as pd
import io
import requests

url = 'https://data.epa.gov/efservice/PUB_DIM_FACILITY/ROWS/0:10/JSON'
r = requests.get(url)  
df = pd.read_csv(io.StringIO(r.t
ext))
>>> 0 rows × 459 columns

我这里哪里做错了?任何输入将不胜感激。谢谢。

效果很好:

import requests, csv, json
import pandas as pd
url = 'https://data.epa.gov/efservice/PUB_DIM_FACILITY/ROWS/0:10/JSON'
corona_bra = pd.read_json(url)
print(corona_bra.head())

试试这个

import pandas as pd

df = pd.read_json('https://data.epa.gov/efservice/PUB_DIM_FACILITY/ROWS/0:10/JSON')

FACILITY_ID LATITUDE    LONGITUDE   CITY    STATE   ZIP COUNTY_FIPS COUNTY  ADDRESS1    ADDRESS2    ... REPORTED_INDUSTRY_TYPES FACILITY_TYPES  SUBMISSION_ID   UU_RD_EXEMPT    REPORTING_STATUS    PROCESS_STATIONARY_CML  COMMENTS    RR_MRV_PLAN_URL RR_MONITORING_PLAN  RR_MONITORING_PLAN_FILENAME
0   1000001 48.828707   -122.685533 FERNDALE    WA  98248   53073   WHATCOM COUNTY  5105 LAKE TERRELL ROAD  NaN ... D   Direct Emitter  176997  NaN NaN NaN NaN NaN NaN NaN
1   1000001 48.828707   -122.685533 FERNDALE    WA  98248   53073   WHATCOM COUNTY  5105 LAKE TERRELL ROAD  NaN ... C   Direct Emitter  5752    NaN NaN NaN NaN NaN NaN NaN

@Starbucks 和@Marcello Chiuminatto 的解决方案非常适合此用例。如果你有更复杂的 json 你试图解析成一个数据帧,然后考虑使用 pd.json_normalize (docs)。对于此示例,以下等效于使用 pd.read_json

import requests
url = "https://data.epa.gov/efservice/PUB_DIM_FACILITY/ROWS/0:10/JSON"
json = requests.get(url).json()
df = pd.json_normalize(json)

当您解析到 df 中的 json 具有多个级别时,这将使您能够更好地控制要解析的深度级别、从什么级别开始解析、如何处理嵌套对象,等等。查看文档以获取更多详细信息。这在处理我需要转换为特定数据帧格式的复杂 json 对象时非常有用。