作者:Python进阶者

来源:Python爬虫与数据挖掘

一、前言

前几天在Python白银交流群【HugoLB】问了一个Python处理json文件的问题,提问截图如下:

sql和json的区别(大佬们有没有办法把这个json变成sql)(1)

二、实现过程

这里【此类生物】提示使用pandas中的read_json()函数来处理,【dcpeng】给出了代码如下图所示:

sql和json的区别(大佬们有没有办法把这个json变成sql)(2)

看上去好像也没啥问题,但是并不是粉丝想要的。

sql和json的区别(大佬们有没有办法把这个json变成sql)(3)

【dcpeng】还想到了jsonpath,另外正则表达式应该也可以做,代码如下:

import json import jsonpath obj = json.load(open('EN_soccer_straight.json', 'r', encoding='utf-8')) follower = jsonpath.jsonpath(obj, '$..data') print(follower)

sql和json的区别(大佬们有没有办法把这个json变成sql)(4)

后来【此类生物】也给了一份代码,如下所示:

sql和json的区别(大佬们有没有办法把这个json变成sql)(5)

但是仍然不是他想要的,因为担心数据处理太麻烦。

sql和json的区别(大佬们有没有办法把这个json变成sql)(6)

如果是这样的话,需要读取后再处理下才行。

后来他自己给了一个代码,看上去没啥问题了,代码如下:

from pandas.io.json import json_normalize import pandas import json f = open('./clean/data/EN_soccer_straight.json', 'r') data = json.loads(f.read()) f.close() def dat(x): if x == None: return None else: return x['data'] df = pandas.DataFrame.from_dict( orient='index', columns=['home', 'away', 'matchup_id', "-3.5", "-3.25", "-3.0", "-2.75", "-2.5", "-2.25", "-2.0", "-1.75", "-1.5", "-1.25", "-1.0", "-0.75", "-0.5", "-0.25", "0.0", "0.25", "0.5", "0.75", "1.0", "1.25", "1.5", "1.75", "2.0", "2.25", "2.5", "2.75", "3.0", "3.25", "3.5", "3.75", "4.0", "4.25"], data=data) for odds in ["-3.5", "-3.25", "-3.0", "-2.75", "-2.5", "-2.25", "-2.0", "-1.75", "-1.5", "-1.25", "-1.0", "-0.75", "-0.5", "-0.25", "0.0", "0.25", "0.5", "0.75", "1.0", "1.25", "1.5", "1.75", "2.0", "2.25", "2.5", "2.75", "3.0", "3.25", "3.5", "3.75", "4.0", "4.25"]: df[odds] = df[odds].apply(dat) print(df.head(10)) df.to_csv('out.csv')

直接用这个代码对原始的json文件进行处理,还是会报错的,后来才知道他自己稍微改了下数据结构。

sql和json的区别(大佬们有没有办法把这个json变成sql)(7)

最终得到的数据如下所示:

sql和json的区别(大佬们有没有办法把这个json变成sql)(8)

这样看上去确实清晰了很多,接下来开站相关的数据分析工作,就可以顺利进行了。

最后补充个知识点,json.dumps()方法将字典转换为json格式的字符串;json.loads()将json格式的字符串转换为字典格式。另外,json模块也可以与文件进行交互,使用dump()方法和load()方法。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python列表推导式处理的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

,