首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python数据分析时读写json,这个关键参数你绝不能忽略

之前说过关于如何利用Pandas这一神器读写EXCEL、CSV等等常见格式的问题。时隔多日,我们接着来讲讲json格式如何在Python的Pandas库进行I/O。

首先我们要明白的一点是:json和EXCEL、CSV包括SQL的明显区别在于,他们在结构上有很大的不同。前者类似Python中由键值对构成的字典,而后三者则偏向于结构化的电子表格。基于这种不同,Pandas在对json进行I/O的时候也会有很大的不同。

Output

我们先来看看json的输出,事先构造一个DF:

然后通过DF.to_json方法即可进行输出,其中有一个关键的参数是orient,用来指定输出的json文件的格式。对于DF,其可选项有:split/records/index/columns/values/table。而对于Series,可选项只有split/records/index。

而这些可选项到底表示的都是怎样的json形式,咱们直接上例子看看,毕竟百闻不如一见。

split

可以看出,当参数orient取值为split时,其格式类似于由columns/index/data三组键值对组成的字典,可以简单理解为将原DF分成了DF.columns、DF.index和DF.values三部分,然后拼装成了一个字典的模样。

records

上面的是取值为records时的结果,其格式则类似由三个字典构成的列表,每个字典则可以看做是原DF的一行,即一条记录(record)。这么来理解,倒也挺方便。

index

上面是取值为index时的结果,跟再上面的格式对比一下,就能看到相似度很高,只是多了每行的index标签,同时最外围用花括号代替了中括号。

columns

如果说取值为index时是将原DF一行一行展示出来了,那么取值为columns时,则是将原DF一列一列展示了出来。

values

相比之下,取值values好理解的多,意即不要原DF的index和columns,只取了values,然后按行用嵌套列表展示了出来。

而取值table时,则相当于在取值为records的基础上添加了对数据描述的schema。由于截图太长,就不贴出来了,感兴趣的朋友自己写一遍就知道了。

Input

读入json的时候,其格式也是需要重点考虑的一点。我们可以事先用记事本或sublime text打开文件然后对照上面看看属于哪种格式,然后在下面的pd.read_json对应的orient参数中传入对应的值就可以正确的读取了:

当然,某些时候,即使你的orient传入的格式不那么准确,pandas也能不报错的帮我们读取进来,但是显示出来的格式就保不齐是怎样的了。所以在读入的时候,正确的判断json文件对应的格式很重要。

再说一下这个号的宗旨吧,因为身边不时有朋友会问一些这方面的事情。做这个号纯粹出于个人爱好,希望大家能喜欢,然后给文章点个赞或者加个关注什么的,能满足我一点小小的虚荣,往后再写什么也有那么一丝动力了。我不会特别高产,像日更啊什么的基本是做不到的,毕竟每篇文章都是自己一个字一个字敲出来的,案例数据不是自己在网上找或者采集下来的,就是在脑中虚构了一个场景后编出来的,很费时。很多东西我不会照着官方文档的例子去写(网上这样写博客的一抓一大把,连案例的数据都懒得换),官方文档虽说很精准,但是例子基本都烂的很,比如说pandas和matplotlib。我希望我的案例数据是有血有肉的,至少是应该有一些若有若无的场景在里面,而不是诸如一堆foo、baz、qux等等连鬼都不明白到底啥意思的东西。

好好取个名字就那么难?!

我也不是什么大神,只是用的时间稍微长那么一点而已,希望大家能开开心心地共同进步。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190105A08X7V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券