如何使用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的字典結構沒有太大的不同。

示例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/ 
譯者:測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM