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

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

在这篇文章中,我们将学习如何使用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的字典结构没有太大的不同。

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

示例JSON文件

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

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

Python字典

保存到JSON文件中

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

Python JSON 示例:

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

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

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

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

Pandas读取 Json示例:

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

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

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

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

使用Pandas操作数据

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

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

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

使用Pandas将JSON 保存到CSV示例

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

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

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

有关使用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的字符串变量:

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

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

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

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

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

来自JSON的Pandas数据帧

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

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

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

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

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

使用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年期间被取消的航班数量,并按航空公司代码进行分组。

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

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

注意,我们使用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/

译者:测试

相关推荐