• 大佬们有没有办法把这个json变成sql db或者df?


    点击上方“Python爬虫与数据挖掘”,进行关注

    回复“书籍”即可获赠Python从入门到进阶共10本电子书

    黄金燃桂尽,壮志逐年衰。

    大家好,我是皮皮。

    一、前言

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

    0e02523abf9330716e3859d61b5302a9.png

    二、实现过程

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

    f4ddd9da00f1432d557efa8bfe7f2b98.png

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

    53f5e9e32808271986dd5f4958ef5e3d.png

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

    1. import json
    2. import jsonpath
    3. obj = json.load(open('EN_soccer_straight.json''r', encoding='utf-8'))
    4. follower = jsonpath.jsonpath(obj, '$..data')
    5. print(follower)
    b7efa506c3c35f48328f0b367c1625f2.png

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

    02e6ce22b1395eed1233a516b81c383d.png

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

    9b7fec8449dffb5b33b7d0c7da966cf7.png

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

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

    1. from pandas.io.json import json_normalize
    2. import pandas
    3. import json
    4. f = open('./clean/data/EN_soccer_straight.json''r')
    5. data = json.loads(f.read())
    6. f.close()
    7. def dat(x):
    8.     if x == None:
    9.         return None
    10.     else:
    11.         return x['data']
    12. df = pandas.DataFrame.from_dict(
    13.     orient='index',
    14.     columns=['home''away''matchup_id'"-3.5""-3.25""-3.0""-2.75""-2.5""-2.25""-2.0""-1.75""-1.5",
    15.              "-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",
    16.              "2.0""2.25""2.5""2.75""3.0""3.25""3.5""3.75""4.0""4.25"],
    17.     data=data)
    18. 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",
    19.              "-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",
    20.              "3.0""3.25""3.5""3.75""4.0""4.25"]:
    21.     df[odds] = df[odds].apply(dat)
    22. print(df.head(10))
    23. df.to_csv('out.csv')

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

    31dc90a39fcdefd6bfadb89eb48889bf.png

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

    b414636dfdfb2e301718b15fac8d95ff.png

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

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

    三、总结

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

    最后感谢粉丝【HugoLB】提问,感谢【此类生物】、【dcpeng】、【猫药师Kelly】、【论草莓如何成为冻干莓】给出的思路和代码解析,感谢【PI】、【dcpeng】、【冫马讠成】等人参与学习交流。

    大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting),应粉丝要求,我创建了一些高质量的Python付费学习交流群,欢迎大家加入我的Python学习交流群!

    f8c8bc25863479045ea19459b1c98bcf.png

    小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

    3e58b43b348981b97ca100dcd7e3ff13.png

    ------------------- End -------------------

    往期精彩文章推荐:

    7e0eb8a1ef75504f4defb81140df56ac.png

    欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

    想加入Python学习群请在后台回复【入群

    万水千山总是情,点个【在看】行不行

    /今日留言主题/

    随便说一两句吧~~

  • 相关阅读:
    【区分vue2和vue3下的element UI Table 表格组件,分别详细介绍属性,事件,方法如何使用,并举例】
    【Java 进阶篇】JQuery 遍历 —— `each()` 方法的奇妙之旅
    MySQL之CRUD
    ESP32 使用 LVGL 的简单介绍(ESP32 for Arduino)
    MES系统是如何采集Modbus设备数据的呢?
    MASM32编写TcpStatC再进阶 显示PID和对应进程说明符
    HMS Core手语服务荣获2022中国互联网大会“特别推荐案例”:助力建设数字社会
    实现简单的shared_ptr
    使用fgetc求文件的行数
    【特别注意事项】C语言解引用未初始化的指针
  • 原文地址:https://blog.csdn.net/pdcfighting/article/details/126564480