Python學習筆記第五十六(Pandas JSON)

Python學習筆記第五十六天

  • Pandas JSON
    • read_json()
    • to_string()
    • 字典轉為 DataFrame 數據
  • 內嵌的 JSON 數據
    • json_normalize()
  • 后記

Pandas JSON

JSON(JavaScript Object Notation,JavaScript 對象表示法),是存儲和交換文本信息的語法,類似 XML。

JSON 比 XML 更小、更快,更易解析,更多 JSON 內容可以參考 JSON 教程。

Pandas 可以很方便的處理 JSON 數據,本文以 sites.json 為例,內容如下:

[{"id": "A001","name": "百度","url": "www.baidu.com","likes": 95},{"id": "A002","name": "Google","url": "www.google.com","likes": 112},{"id": "A003","name": "淘寶","url": "www.taobao.com","likes": 66}
]

read_json()

# 實例 1
import pandas as pd
df = pd.read_json('sites.json')
print(df.to_string())

to_string()

to_string() 用于返回 DataFrame 類型的數據,我們也可以直接處理 JSON 字符串。

# 實例 2
import pandas as pd
data =[{"id": "A001","name": "百度","url": "www.baidu.com","likes": 95},{"id": "A002","name": "Google","url": "www.google.com","likes": 112},{"id": "A003","name": "淘寶","url": "www.taobao.com","likes": 66}
]
df = pd.DataFrame(data)
print(df)

字典轉為 DataFrame 數據

JSON 對象與 Python 字典具有相同的格式,所以我們可以直接將 Python 字典轉化為 DataFrame 數據:

# 實例 3
import pandas as pd
# 字典格式的 JSON                                                                                              
s = {"col1":{"row1":1,"row2":2,"row3":3},"col2":{"row1":"x","row2":"y","row3":"z"}
}
# 讀取 JSON 轉為 DataFrame                                                                                          
df = pd.DataFrame(s)
print(df)

內嵌的 JSON 數據

假設有一組內嵌的 JSON 數據文件 nested_list.json :
nested_list.json 文件內容

{"school_name": "ABC primary school","class": "Year 1","students": [{"id": "A001","name": "Tom","math": 60,"physics": 66,"chemistry": 61},{"id": "A002","name": "James","math": 89,"physics": 76,"chemistry": 51},{"id": "A003","name": "Jenny","math": 79,"physics": 90,"chemistry": 78}]
}

使用以下代碼格式化完整內容:

# 實例 4
import pandas as pd
df = pd.read_json('nested_list.json')
print(df)

json_normalize()

這時我們就需要使用到 json_normalize() 方法將內嵌的數據完整的解析出來:

# 實例 5
import pandas as pd
import json
# 使用 Python JSON 模塊載入數據
with open('nested_list.json','r') as f:data = json.loads(f.read())
# 展平數據
df_nested_list = pd.json_normalize(data, record_path =['students'])
print(df_nested_list)

data = json.loads(f.read()) 使用 Python JSON 模塊載入數據。

json_normalize() 使用了參數 record_path 并設置為 [‘students’] 用于展開內嵌的 JSON 數據 students。

顯示結果還沒有包含 school_name 和 class 元素,如果需要展示出來可以使用 meta 參數來顯示這些元數據:

# 實例 6
import pandas as pd
import json
# 使用 Python JSON 模塊載入數據
with open('nested_list.json','r') as f:data = json.loads(f.read())
# 展平數據
df_nested_list = pd.json_normalize(data,record_path =['students'],meta=['school_name', 'class']
)
print(df_nested_list)

接下來,讓我們嘗試讀取更復雜的 JSON 數據,該數據嵌套了列表和字典,數據文件 nested_mix.json 如下:

nested_mix.json 文件內容

{"school_name": "local primary school","class": "Year 1","info": {"president": "John Kasich","address": "ABC road, London, UK","contacts": {"email": "admin@e.com","tel": "123456789"}},"students": [{"id": "A001","name": "Tom","math": 60,"physics": 66,"chemistry": 61},{"id": "A002","name": "James","math": 89,"physics": 76,"chemistry": 51},{"id": "A003","name": "Jenny","math": 79,"physics": 90,"chemistry": 78}]
}

nested_mix.json 文件轉換為 DataFrame:

# 實例 7
import pandas as pd
import json
# 使用 Python JSON 模塊載入數據
with open('nested_mix.json','r') as f:data = json.loads(f.read())   
df = pd.json_normalize(data,record_path =['students'],meta=['class',['info', 'president'],['info', 'contacts', 'tel']]
)
print(df)

讀取內嵌數據中的一組數據
以下是實例文件 nested_deep.json,我們只讀取內嵌中的 math 字段:

nested_deep.json 文件內容

{"school_name": "local primary school","class": "Year 1","students": [{"id": "A001","name": "Tom","grade": {"math": 60,"physics": 66,"chemistry": 61}},{"id": "A002","name": "James","grade": {"math": 89,"physics": 76,"chemistry": 51}},{"id": "A003","name": "Jenny","grade": {"math": 79,"physics": 90,"chemistry": 78}}]
}

這里我們需要使用到 glom 模塊來處理數據套嵌,glom 模塊允許我們使用 . 來訪問內嵌對象的屬性。

第一次使用我們需要安裝 glom:

pip3 install glom

正確地使用了 glom 模塊來從嵌套的 JSON 數據中提取字段

# 實例 8
import pandas as pd
from glom import glom
df = pd.read_json('nested_deep.json')
data = df['students'].apply(lambda row: glom(row, 'grade.math'))
print(data)

以下是對代碼的詳細解釋:

  • 首先,我們導入了 pandas 和 glom 模塊。pandas 是一個用于數據操作和分析的 Python 庫,而 glom 是一個用于操作和解析 JSON 數據的庫。
  • 然后,我們使用 pandas 的 read_json 函數讀取了一個名為 ‘nested_deep.json’ 的 JSON 文件。這個文件包含了一些有關學生和他們的成績的信息。
  • 我們創建了一個名為 data 的變量,并使用 apply 函數和 lambda 函數來遍歷 df[‘students’] 列中的每一行。對于每一行,我們使用 glom 函數來提取該行的 ‘grade’ 對象中的 ‘math’ 字段。
  • 最后,我們打印了 data 變量,這個變量應該包含了所有學生的數學成績。

如果您運行這段代碼,并確保您的環境已經安裝了 pandas 和 glom,那么應該會看到一個包含所有學生數學成績的列表。

后記

今天學習的是Python Pandas JSON學會了嗎。 今天學習內容總結一下:

  1. Pandas JSON
  2. read_json()
  3. to_string()
  4. 字典轉為 DataFrame 數據
  5. 內嵌的 JSON 數據
  6. json_normalize()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在線吉他調音

先看效果&#xff08;圖片沒有聲&#xff0c;可以下載源碼看看&#xff0c;比這更好~&#xff09;&#xff1a; 再看代碼&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

【第二階段】kotlin的函數類型作為返回類型

fun main() {//調用,返回的是一個匿名類型&#xff0c;所以info就是一個匿名函數val infoshow("",0)//info接受的返回值為匿名類型&#xff0c;此時info就是一個匿名函數println(info("kotlin",20)) }//返回類型為一個匿名函數的返回類型fun show(name:Str…

01 - 工作區、暫存區、版本庫、遠程倉庫 - 以一次連貫的提交操作為例

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. 工作區、暫存區、版本庫、遠程倉庫1.1 工作區1.2 工作區 > 暫存區&#xff1a;git add1.3 暫存區 > 版本庫&#xff1a;git commit1.4 push到遠程倉庫 1. 工作區、暫存區、版本…

【生成式AI】ProlificDreamer論文閱讀

ProlificDreamer 論文閱讀 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 論文簡介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD優化方法 前置芝士:text-to-3D任務簡介 text-to-3D Problem text-to-3D…

解決校園網使用vmware橋接模式,虛擬機與物理機互相ping通,但是虛擬機ping不通百度的問題

遇到的問題 使用校園網時&#xff0c;橋接模式下&#xff0c;物理機可以ping通虛擬機&#xff0c;但是虛擬機ping不通主機 解決方法 在物理機中查看網絡相關信息 ipconfig 修改虛擬機網卡信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 注意 /ifcfg-ens33需要根據…

C++ QT(一)

目錄 初識QtQt 是什么Qt 能做什么Qt/C與QML 如何選擇Qt 版本Windows 下安裝QtLinux 下安裝Qt安裝Qt配置Qt Creator 輸入中文配置Ubuntu 中文環境配置中文輸入法 Qt Creator 簡單使用Qt Creator 界面組成Qt Creator 設置 第一個Qt 程序新建一個項目項目文件介紹項目文件*.pro樣式…

微信記錄---推薦系統---23/8/14 小總結

推薦系統---23/8/14 小總結 1. ACM推薦系統專題研討會2.圖神經網絡推薦系統3.表1 模型效果對標:MovieLens 1M4.爬蟲技術5.TF-IDF算法6.圖 2 海量學術大數據推薦系統技術架構7.圖 4 CADAL 平臺推薦系統框架設計8.企業推薦系統發展概述MLR(Mixed Logistic Regression)DIEN(Deep…

SpringBoot啟動報錯:java: 無法訪問org.springframework.boot.SpringApplication

報錯原因&#xff1a;jdk 1.8版本與SpringBoot 3.1.2版本不匹配 解決方案&#xff1a;將SpringBoot版本降到2系列版本(例如2.5.4)。如下圖&#xff1a; 修改版本后切記刷新Meavn依賴 然后重新啟動即可成功。如下圖&#xff1a;

3.4 網絡安全管理設備

數據參考&#xff1a;CISP官方 目錄 IDS (入侵檢測系統)網絡安全審計漏洞掃描系統VPN&#xff08;虛擬專網&#xff09;堡壘主機安全管理平臺 一、IDS (入侵檢測系統) 入侵檢測系統&#xff08;IDS&#xff09;是一種網絡安全設備&#xff0c;用于監測和檢測網絡中的入侵行…

樹莓派3B CSI攝像頭配置

1.硬件連接 1、找到 CSI 接口(樹莓派3B的CSI接口在HDMI接口和音頻口中間)&#xff0c;需要拉起 CSI 接口擋板,如下&#xff1a; 2、將攝像頭排線插入CSI接口。記住&#xff0c;有藍色膠帶的一面應該面向音頻口或者網卡方向&#xff0c; 確認方向并插緊排線&#xff0c;將擋板…

【Linux】磁盤或內存 占用比較高要怎么排

當 Linux 磁盤空間滿了時 請注意&#xff0c;在進行任何刪除操作之前&#xff0c;請確保你知道哪些文件可以安全刪除&#xff0c;并備份重要文件&#xff0c;以免意外丟失數據。當 Linux 磁盤空間滿了時&#xff0c;可以按照以下步驟進行排查&#xff1a; 檢查磁盤使用情況&…

華為OD面試(部分)

筆試與性格測驗 一面 問題和算法題都挺簡單的 二面 Java內存泄漏 算法題思路不對&#xff0c;沒寫完只說了下思路&#xff1a;Leetcode516. Longest Palindromic Subsequence hr面&#xff08;資面&#xff09; 最后告訴我hr面掛了。其實這不是最重要的&#xff0c;因為還…

計算機競賽 python 機器視覺 車牌識別 - opencv 深度學習 機器學習

1 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 機器視覺 的車牌識別系統 &#x1f947;學長這里給一個題目綜合評分(每項滿分5分) 難度系數&#xff1a;3分工作量&#xff1a;3分創新點&#xff1a;3分 &#x1f9ff; 更多資…

【設計模式】建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;使用多個簡單的對象一步一步構建成一個復雜的對象。這種類型的設計模式屬于創建型模式&#xff0c;它提供了一種創建對象的最佳方式。 一個 Builder 類會一步一步構造最終的對象。該 Builder 類是獨立于其他對象的。 介紹 …

微信小程序:Mobx的使用指南

簡要 微信小程序中有時需要進行全局狀態管理&#xff0c;這個時候就需要用到Mobx.下面我們來看一下在小程序中是如何使用Mobx的 安裝 pnpm i mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 或 npm i mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 或 yarn…

LeetCode 31題:下一個排列

目錄 題目 思路 代碼 題目 整數數組的一個 排列 就是將其所有成員以序列或線性順序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下這些都可以視作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整數數組的 下一個排列 是指其整數的下一個字典序…

Flink 火焰圖

方式一 使用 Flink Web UI 的 Flame Graph Flink 自己也支持了 Task 粒度的 Flame Graphs 功能&#xff0c;并且可以細化到 subtask 粒度。 第一步&#xff1a;配置啟用功能 Flink 作業動態參數里增加配置&#xff1a;“rest.flamegraph.enabled”: “true” 并重啟作業。當前…

Blazor 簡單組件(0):簡單介紹

文章目錄 前言說明環境安裝 前言 Blazor 這個技術還是比較新&#xff0c;相關的UI組件還在完善&#xff0c;我這里提供一下我個人的組件開發。 說明 本UI組件是基于BootstrapBlazor(以下簡稱BB)開發。 BootstrapBlazor 文檔 環境安裝 C#小輪子&#xff1a;Visual Studio自…

C語言快速回顧(二)

前言 在Android音視頻開發中&#xff0c;網上知識點過于零碎&#xff0c;自學起來難度非常大&#xff0c;不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》&#xff0c;結合我自己的工作學習經歷&#xff0c;我準備寫一個音視頻系列blog。C/C是音視頻必…

目前有哪些好用的免費開源wms倉儲管理軟件?

什么是開源&#xff1f; 開源指的是軟件的源代碼是公開可見和可自由使用的。開源軟件的授權許可通常允許用戶查看、修改和分發源代碼&#xff0c;以及根據自己的需求進行定制和擴展。 開源工具的核心理念是共享和協作。通過開放源代碼&#xff0c;開源軟件鼓勵用戶之間的合作…