社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何使用Python 和 Pandas读写JSON文件

Python程序员 • 6 年前 • 897 次点击  

在这篇文章中,我们将学习如何使用Python读写JSON文件。在第一部分中,我们将使用Python包json来创建一个JSON文件并写入一个JSON文件。在下一部分中,我们将使用Pandas的 json方法将JSON文件加载到Pandas 数据帧中。在这里,我们将学习如何从本地和一个URL读取JSON文件,以及如何使用Pandas读取一个嵌套的JSON文件。


最后,作为奖励,我们还将学习如何操作Pandas数据帧中的数据、重命名列和使用Seaborn对数据绘制图表。


什么是JSON文件?


JSON是JavaScript对象表示法的缩写,是一种紧凑的、基于文本的格式,用于交换数据。这种格式通常用于通过所谓的Web API来从web服务器下载和存储信息。JSON是一种基于文本的格式,在打开一个JSON文件时,我们将识别出其结构。也就是说,它与Python的字典结构没有太大的不同。


示例JSON文件


在第一个示例中,我们将使用Python模块json创建一个JSON文件。完成这一步之后,我们将加载此JSON文件。在这个Python JSON教程中,我们首先为我们的数据创建一个字典:

Python字典


保存到JSON文件中


在Python中,有一个模块json允许我们对一个JSON文件内容进行读写。该模块会将JSON格式转换为Python的内部数据结构格式。因此,我们可以像处理Python自己的数据结构一样来处理JSON结构。


Python JSON 示例:

在下面的示例代码中,我们首先导入json模块。导入之后,我们打开一个新文件,并使用dump方法来使用Python写入一个json文件。


如何使用Pandas载入一个 JSON 文件


现在,如果我们要处理这些数据,我们可能希望使用Pandas来将JSON文件加载到一个Pandas数据帧中。这样我们就可以使用Pandas的内置方法来操作数据、进行汇总统计和数据可视化。注意,我们将在本文后面简要讨论这个问题。


Pandas读取 Json示例:

在下一个示例中,我们将使用Pandas的 read_json方法来读取我们前面写入的JSON文件(即data.json)。这是相当简单的,我们先将pandas导入为pd:


当你使用Jupyter Notebook时,输出将如下所示:


使用Pandas操作数据


现在我们已经将JSON文件加载到一个Pandas数据帧中,我们将使用Pandas的inplace方法来修改我们的数据帧。我们先将Sub_ID列设置为索引。


使用Pandas将JSON 保存到CSV示例


现在,当我们将JSON文件加载到一个数据帧中时,我们可能希望将它保存为另一种格式。例如,我们可能想将它保存为一个CSV文件,我们可以使用Pandas的to_csv方法来实现这一点。如果我们喜欢在文本编辑器或Excel中浏览数据,那么将它存储在一个CSV中可能很有用。


在下面的使用Pandas将JSON 保存到CSV的示例中,我们执行了相同的数据操作方法。


有关使用Pandas处理CSV文件的更多信息,请参见《Pandas阅读CSV教程》。https://www.marsja.se/pandas-read-csv-tutorial-to-csv/ 


如何从一个URL加载JSON


现在,我们已经看到了创建一个JSON文件、使用Python将其写入硬盘驱动器以及最后使用Pandas读取它是多么容易。但是,正如前面提到的,以JSON格式存储的数据很多时候都在网络上。


因此,在本Python json指南的这一节中,我们将学习如何使用Pandas的 read_json方法从一个URL读取一个JSON文件。大多数情况下,这是相当简单的,我们只需要创建一个指向该URL的字符串变量:


从一个URL加载JSON 的第二个示例


当加载一些数据时,使用Pandas的 read_json似乎会在每个单元格中创建一个带有字典的数据帧。处理这些字典(嵌套在字典中)的一种方法是使用Python模块request。这个模块还有一个解析JSON文件的方法。在解析了JSON文件之后,我们将使用json_normalize方法来将此JSON文件转换为一个数据帧。

来自JSON的Pandas数据帧

如上图所示,列名称非常长。当我们稍后准备使用Seaborn创建一个时间数列图时,这是非常不切实际的。我们现在要重命名列,这样它们就会变得易于使用一点。


在下面的代码示例中,我们使用了Pandas的 rename方法和Python模块re。也就是说,我们使用一个正则表达式来从列名称中删除“statistics.# of” 和 “statistics.”。最后,我们还使用str.replace方法将点(" . ")替换为下划线(" _ "):


使用Python包Pyjanitor(感谢Shantanu Oak在评论部分指出这一点)对列进行重命名要更快、更容易。查看如何使用Pandas和Pyjanitor重命名列,以及使用Pyjanitor进行的其他操作:

  • 使用 Python & Pandas的最简单的数据清理方法https://www.marsja.se/easiest-data-cleaning-method-using-python-pandas-pyjanitor/ 


使用Seaborn从JSON数据绘制时间数列图


在本文的最后一个示例中,我们将使用Seaborn创建一个时间数列图。我们从JSON加载到一个数据帧中的数据包含关于延迟和取消的航班的信息。我们将使用Seaborns 的lineplot方法创建一个时间数列图来显示2003年至2016年期间被取消的航班数量,并按航空公司代码进行分组。

注意,我们使用set_ylabel和set_xlabel方法更改了字体大小以及x轴和y轴的标签。此外,我们还使用matplotlib中的legend方法移动了图例。


有关使用Python进行探索性数据分析的更多信息:

  • Python中需要学习的9种数据可视化技术 https://www.marsja.se/python-data-visualization-techniques-you-should-learn-seaborn/ 

  • 使用Python、Pandas和Seaborn进行探索性数据分析 https://www.marsja.se/explorative-data-analysis-with-pandas-scipy-and-seaborn/ 


结论


在这篇文章中,我们学习了如何将数据从一个Python字典写入JSON文件,如何使用Python和Pandas加载该JSON文件。此外,我们还学习了如何使用Pandas将一个JSON文件从一个URL加载到一个数据帧中,如何将一个嵌套的JSON文件读取到一个数据帧中。


这里有一个链接到JupyterNotebook的链接,其中包含本文中的所有代码示例。

(链接:https://github.com/marsja/jupyter/blob/master/json_in_python_and_pandas.ipynb  )


英文原文:https://www.marsja.se/how-to-read-and-write-json-files-using-python-and-pandas/ 
译者:测试
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40882