解析嵌套的 JSON 并迭代到 Pandas Dataframe
Posted
技术标签:
【中文标题】解析嵌套的 JSON 并迭代到 Pandas Dataframe【英文标题】:Parse nested JSON and iterate into Pandas Dataframe 【发布时间】:2021-10-15 04:29:25 【问题描述】:我正在使用 Foursquare API 调用来查找与美国特定邮政编码相关的场所。
我能够生成带有信息的 JSON,但是在循环和解析以构建 pandas 数据框时遇到了问题。
到目前为止:
# scraping the foursquare website for the information we want and obtaining the json file as results
for i, series in df_income_zip_good.iterrows():
lat = series ['lat']
lng = series ['lng']
town = series ['place']
LIMIT = 100
radius = 1000
url4Sqr = 'https://api.foursquare.com/v2/venues/explore?&client_id=&client_secret=&v=&ll=,&radius=&limit='.format(
CLIENT_ID,
CLIENT_SECRET,
VERSION,
lat,
lng,
radius,
LIMIT)
venues = requests.get(url4Sqr).json()
#print results from call
print (venues)
#https://***.com/questions/6386308/http-requests-and-json-parsing-in-python
这可以正常工作并生成 JSON。我已将输出链接到 GitHub 上的 JSON 文件:(https://github.com/adhorvitz/coursera_ibm_capstone/blob/524c6609ea8872e0c188cd373a4778caaadb1cf6/venuedatasample.json)
我不确定如何最好地展平 JSON,然后循环提取我想要加载到数据框中的信息片段。我试图搞砸以下没有成功。
def flatten_json(nested_json, exclude=['']):
"""Flatten json object with nested keys into a single level.
Args:
nested_json: A nested json object.
exclude: Keys to exclude from output.
Returns:
The flattened json object if successful, None otherwise.
The code recursively extracts values out of the object into a flattened dictionary. json_normalize can be applied to the output of flatten_object to produce a python dataframe:
"""
out =
def flatten(x, name='venues', exclude=exclude):
if type(x) is dict:
for a in x:
if a not in exclude: flatten(x[a], name + a + '_')
elif type(x) is list:
i = 0
for a in x:
flatten(a, name + str(i) + '_')
i += 1
else:
out[name[:-1]] = x
flatten(nested_json)
return out
#https://towardsdatascience.com/flattening-json-objects-in-python-f5343c794b10
然后我运行:
for i in venues():
json_flat_venues = flatten_json(venues)
json_flat_venues
产生一个错误,指出“dict”对象不可调用。
我也试过了:
for i in venues():
df_venues_good = pd.json_normalize(venues)
df_venues_good
产生同样的错误。
我有点迷失方向,以及如何最好地将 JSON 转换为可行的 DF。
提前致谢。
-------更新-----------
所以我尝试了一些方法。
在我引用了 cmets 中留下的页面后: https://www.geeksforgeeks.org/flattening-json-objects-in-python/, 我安装了 json_flatten(使用 pop),但在导入时遇到问题 展平。
作为一种变通方法,我尝试从网站重新创建代码,以适应我的项目。我想我弄得一团糟比我清理的还要多。
我重新运行了原始的“flatten_json”def(见上文)。然后我在没有 for 循环语句的情况下分配了 df_venues_good(也在上面)。
删除 for 循环后,它看起来像是开始从 json 中提取第一条记录。但是,它看起来像元数据(或者至少是我不想提取的数据)。
我在查看 json 时也注意到了一个问题。在我的输出(我使用的是 Jupyter 笔记本)单元格中,看起来所有记录都已检索到(总共大约 95 条)。
然后我运行它只是转储文件进行检查:
JsonString = json.dumps(venues)
JsonFile = open("venuedata.json", "w")
JsonFile.write(JsonString)
JsonFile.close()
当我打开转储文件(我在上面链接的)时,它看起来并不完整。
任何方向都将不胜感激。
【问题讨论】:
这是您要找的东西吗:geeksforgeeks.org/flattening-json-objects-in-python 如果您还有其他问题,请告诉我,这样我就可以尝试为代表点寻找答案 你可以编辑这个问题 更新了您的见解、测试、错误和问题。 把你的代码放到 Github 上分享。我会为你测试它并引导你完成结果。我将向您展示如何使用 print() 测试每一行代码。 【参考方案1】:经过 4 天的沟通,我想我看到了您提出的真正问题,这将使您继续前进。您需要查找并解决以下两个错误。如果您同意并自行解决更多工作故障,请将我的回答标记为正确,围绕您的见解、错误和围绕以下图片提出的问题创建一个新问题。
您可以用来帮助您“扁平化 Json 数据”的库是 Pandas、requests、Jsons,甚至库 csv 也可以在这里为您提供帮助。
如果您正在学习 python、数据分析以及如何使用 api,那么如果没有更清晰的描述和技术问题示例,您将在 *** 上找到很少甚至没有更多帮助。
请继续自学并继续努力!你得到了这个:)
请让我们知道随着您的成长,社区可以如何帮助解决个别问题和问题:)
【讨论】:
以上是关于解析嵌套的 JSON 并迭代到 Pandas Dataframe的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas python 将嵌套的 JSON 解析为多个数据帧
使用 Pandas 在巨大的 CSV 中解析带有嵌套值的 JSON 列