将 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 对象时非常有用。
我已经尝试了一些关于请求数据和将数据从请求转换为 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 对象时非常有用。