点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
黄金燃桂尽,壮志逐年衰。
大家好,我是皮皮。
一、前言
前几天在Python白银交流群【HugoLB】问了一个Python
处理json
文件的问题,提问截图如下:
![0e02523abf9330716e3859d61b5302a9.png](https://i-blog.csdnimg.cn/blog_migrate/b1eb0897d63d7221d5e8ae173801f63b.png)
二、实现过程
这里【此类生物】提示使用pandas
中的read_json()
函数来处理,【dcpeng】给出了代码如下图所示:
![f4ddd9da00f1432d557efa8bfe7f2b98.png](https://i-blog.csdnimg.cn/blog_migrate/5e1b35859cad92efc03edc2271b5d23b.png)
看上去好像也没啥问题,但是并不是粉丝想要的。
![53f5e9e32808271986dd5f4958ef5e3d.png](https://i-blog.csdnimg.cn/blog_migrate/4411e963f2277b1aa803c8d6fa859d10.png)
【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)
![b7efa506c3c35f48328f0b367c1625f2.png](https://i-blog.csdnimg.cn/blog_migrate/957c17c6c3b8df4b11f7e63011818a90.png)
后来【此类生物】也给了一份代码,如下所示:
![02e6ce22b1395eed1233a516b81c383d.png](https://i-blog.csdnimg.cn/blog_migrate/a4da22a2090ca827809ae91d62db2787.png)
但是仍然不是他想要的,因为担心数据处理太麻烦。
![9b7fec8449dffb5b33b7d0c7da966cf7.png](https://i-blog.csdnimg.cn/blog_migrate/6ac4d27f3625fdb54cf4352c05ed3319.png)
如果是这样的话,需要读取后再处理下才行。
后来他自己给了一个代码,看上去没啥问题了,代码如下:
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
文件进行处理,还是会报错的,后来才知道他自己稍微改了下数据结构。
![31dc90a39fcdefd6bfadb89eb48889bf.png](https://i-blog.csdnimg.cn/blog_migrate/66659211508aa4863861529e14c2ad3c.png)
最终得到的数据如下所示:
![b414636dfdfb2e301718b15fac8d95ff.png](https://i-blog.csdnimg.cn/blog_migrate/f56560558b7369b8f5f077b0c970a69d.png)
这样看上去确实清晰了很多,接下来开站相关的数据分析工作,就可以顺利进行了。
最后补充个知识点,json.dumps()方法将字典转换为json格式的字符串;json.loads()将json格式的字符串转换为字典格式。另外,json模块也可以与文件进行交互,使用dump()方法和load()方法。
三、总结
大家好,我是皮皮。这篇文章主要盘点了一个Python
列表推导式处理的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【HugoLB】提问,感谢【此类生物】、【dcpeng】、【猫药师Kelly】、【论草莓如何成为冻干莓】给出的思路和代码解析,感谢【PI】、【dcpeng】、【冫马讠成】等人参与学习交流。
大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting),应粉丝要求,我创建了一些高质量的Python
付费学习交流群,欢迎大家加入我的Python
学习交流群!
![f8c8bc25863479045ea19459b1c98bcf.png](https://i-blog.csdnimg.cn/blog_migrate/6d071e0d4311cf8e69c9cec8680fab97.png)
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~