【機器學習基礎 4】 Pandas庫

一、Pandas庫簡介

????????Pandas 是一個開源的 Python 數據分析庫,主要用于數據清洗、處理、探索與分析。其核心數據結構是 Series(一維數據)和 DataFrame(二維表格數據),可以讓我們高效地操作結構化數據。Pandas 提供了許多靈活且高效的數據操作方法,能夠快速地進行數據篩選、聚合、轉換和可視化,是數據科學和機器學習工作流中非常重要的一環。

二、Pandas庫安裝

??通常直接通過 pip 來安裝;當然,在Anaconda虛擬環境中亦可用如下兩種方式:

pip install pandasconda install pandas

? 在編寫中導入Pandas庫,我們通常會習慣將其簡化為pd:

import pandas as pd

三、常用的Pandas函數

1、數據讀取

Pandas庫支持多種數據格式的導入,例如 CSV、Excel、SQL 數據庫、JSON 等,方便我們從各種數據源中獲取數據。假設我們有一個CSV文件,內部如下:

ID,Name,Age,Score
1,Tom,22,85.0
2,Lily,21,92.0
3,Jack,23,78.0
4,Lucy,22,89.0
5,Rose,21,95.0

我們想要讀取,則可以:

import pandas as pd# 讀取 CSV 文件
df = pd.read_csv('sample.csv')  
print(df.head())  # 查看前 5 行

樣例輸出:

   ID Name  Age   Score
0   1  Tom   22   85.0
1   2  Lily  21   92.0
2   3  Jack  23   78.0
3   4  Lucy  22   89.0
4   5  Rose  21   95.0

?2、查看數據

如果我們想快速檢查數據的基本信息,如行數、列數、數據類型,則可以前面的基礎上加上:

print(df.info())    # 查看數據的基本信息
print(df.describe())  # 生成數據的統計摘要

樣例輸出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----0   ID      5 non-null      int641   Name    5 non-null      object2   Age     5 non-null      int643   Score   5 non-null      float64
dtypes: float64(1), int64(2), object(1)
memory usage: 288.0+ bytes
NoneID       Age      Score
count  5.000000   5.00000   5.000000
mean   3.000000  21.80000  87.800000
std    1.581139   0.83666   6.610598
min    1.000000  21.00000  78.000000
25%    2.000000  21.00000  85.000000
50%    3.000000  22.00000  89.000000
75%    4.000000  22.00000  92.000000
max    5.000000  23.00000  95.000000

?3、數據選擇與過濾

當然,我們還可以對數據進行選擇和過濾,就像下面這樣:

# 選擇某一列
print(df['Name'],'\n')  # 選擇多列
print(df[['Name', 'Score']],'\n')  # 選擇特定行(iloc 按索引,loc 按標簽)
print(df.iloc[1])  
print(df.loc[df['Score'] > 90])  # 篩選成績大于 90 的行

樣例輸出:

0     Tom
1    Lily
2    Jack
3    Lucy
4    Rose
Name: Name, dtype: object Name  Score
0   Tom   85.0
1  Lily   92.0
2  Jack   78.0
3  Lucy   89.0
4  Rose   95.0 ID          2
Name     Lily
Age        21
Score    92.0
Name: 1, dtype: objectID  Name  Age  Score
1   2  Lily   21   92.0
4   5  Rose   21   95.0

4、數據清洗

Pandas庫還可以處理缺失值(用dropna、fillna)、重復值(用drop_duplicates)、替換值(用replace)等。

例如:(我們先把CSV中Rose的score刪掉

# 刪除缺失值
df_cleaned = df.dropna()
print("刪除缺失值后的DataFrame:")
print(df_cleaned.head())# 填充缺失值
df_filled = df.fillna(value={'Score': df['Score'].mean()})
print("\n填充缺失值后的DataFrame:")
print(df_filled.head())# 刪除重復值
df_unique = df.drop_duplicates()
print("\n刪除重復值后的DataFrame:")
print(df_unique.head())# 替換值
df_replaced = df.replace({'Tom': 'Tommy'})
print("\n替換值后的DataFrame:")
print(df_replaced.head())

樣例輸出:

刪除缺失值后的DataFrame:ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 填充缺失值后的DataFrame:ID  Name  Age  Score 
0   1   Tom   22   85.0 
1   2  Lily   21   92.0 
2   3  Jack   23   78.0 
3   4  Lucy   22   89.0 
4   5  Rose   21   86.0 刪除重復值后的DataFrame:ID  Name  Age  Score
0   1   Tom   22   85.0
1   2  Lily   21   92.0
2   3  Jack   23   78.0
3   4  Lucy   22   89.0
4   5  Rose   21    NaN替換值后的DataFrame:ID   Name  Age  Score
0   1  Tommy   22   85.0
1   2   Lily   21   92.0
2   3   Jack   23   78.0
3   4   Lucy   22   89.0
4   5   Rose   21    NaN

5、數據的排序、分組求均值、合并、連接

排序會使用到sort_values函數,分組則使用groupby,合并使用merge,連接使用concat

例如:

# 按 'Score' 排序
df_sorted = df.sort_values(by='Score', ascending=False)
print("按 'Score' 排序后的數據:\n", df_sorted)# 分組并求均值
df_grouped = df.groupby('Age')['Score'].mean()
print("按 'Age' 分組并求 'Score' 的均值:\n", df_grouped)# 合并數據
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']})
df_merged = df.merge(df1, on='ID', how='left')
print("合并后的數據:\n", df_merged)# 連接多個 DataFrame
df_concat = pd.concat([df, df1], axis=0)
print("連接后的數據:\n", df_concat)

?注意:DataFrame 是Pandas庫中的一個函數,用于創建一個數據框(DataFrame)。
????????{'ID': [1, 2, 3], 'Class': ['A', 'B', 'A']} 是一個字典,其中鍵是列名,值是對應的數據。
????????'ID' 是列名,對應的數據是 [1, 2, 3];'Class' 是列名,對應的數據是 ['A', 'B', 'A']。
????????df1 是一個新創建的數據框,包含兩列:ID和Class

????????merge是Pandas中用于合并兩個數據框的函數。
????????df1 是要與當前數據框 df 合并的另一個數據框。
????????on='ID' 指定了合并的鍵(key),即根據兩表中的 ID列進行合并。
????????how='left' 指定了合并的方式為左連接(left join)。這意味著結果將包含左表(即 df)中的所有行,即使右表(即 df1)中沒有匹配的行。如果右表中沒有匹配的行,結果中對應的列將填充為NaN。

樣例輸出:

按 'Score' 排序后的數據:ID  Name  Age  Score
4   5  Rose   21   95.0
1   2  Lily   21   92.0
3   4  Lucy   22   89.0
0   1   Tom   22   85.0
2   3  Jack   23   78.0
按 'Age' 分組并求 'Score' 的均值:Age
21    93.5
22    87.0
23    78.0
Name: Score, dtype: float64      
合并后的數據:ID  Name  Age  Score Class
0   1   Tom   22   85.0     A
1   2  Lily   21   92.0     B
2   3  Jack   23   78.0     A
3   4  Lucy   22   89.0   NaN
4   5  Rose   21   95.0   NaN
連接后的數據:ID  Name   Age  Score Class
0   1   Tom  22.0   85.0   NaN
1   2  Lily  21.0   92.0   NaN
2   3  Jack  23.0   78.0   NaN
3   4  Lucy  22.0   89.0   NaN
4   5  Rose  21.0   95.0   NaN
0   1   NaN   NaN    NaN     A
1   2   NaN   NaN    NaN     B
2   3   NaN   NaN    NaN     A

6、數據轉換

例如:

# 創建數據透視表
pivot_table = df.pivot_table(values='Score', index='Age', aggfunc='mean')
print("透視表:\n", pivot_table)# 使用 apply() 轉換數據
df['Score_Squared'] = df['Score'].apply(lambda x: x ** 2)
print("轉換后的數據:\n", df)# 更改數據類型
df['Age'] = df['Age'].astype(float)
print("更改數據類型后的數據:\n", df)

樣例輸出:

透視表:Score
Age       
21    93.5
22    87.0
23    78.0
轉換后的數據:ID  Name  Age  Score  Score_Squared
0   1   Tom   22   85.0         7225.0 
1   2  Lily   21   92.0         8464.0 
2   3  Jack   23   78.0         6084.0 
3   4  Lucy   22   89.0         7921.0 
4   5  Rose   21   95.0         9025.0 
更改數據類型后的數據:ID  Name   Age  Score  Score_Squared
0   1   Tom  22.0   85.0         7225.0
1   2  Lily  21.0   92.0         8464.0
2   3  Jack  23.0   78.0         6084.0
3   4  Lucy  22.0   89.0         7921.0
4   5  Rose  21.0   95.0         9025.0

7、日期與時間處理

例如:

# 創建日期列
df['Date'] = pd.to_datetime(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'])# 提取年份、月份、星期
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Weekday'] = df['Date'].dt.day_name()print(df)

樣例輸出:

   ID  Name  Age  Score       Date  Year  Month    Weekday
0   1   Tom   22   85.0 2023-01-01  2023      1     Sunday
1   2  Lily   21   92.0 2023-01-02  2023      1     Monday
2   3  Jack   23   78.0 2023-01-03  2023      1    Tuesday
3   4  Lucy   22   89.0 2023-01-04  2023      1  Wednesday
4   5  Rose   21   95.0 2023-01-05  2023      1   Thursday

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

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

相關文章

ETCD --- ?租約(Lease)?詳解

一、租約的核心概念 1. ?租約(Lease)? 一個租約是一個有時間限制的“授權”,綁定到鍵值對上。每個租約有一個唯一的ID(64位整數),通過etcdctl或客戶端API創建。創建租約時需指定TTL(Time-To-Live),即租約的有效期(單位:秒)。客戶端需定期向etcd發送續約(KeepAl…

33.[前端開發-JavaScript基礎]Day10-常見事件-鼠標事件-鍵盤事件-定時器-案例

1 window定時器 window定時器方法 setTimeout的使用 setInterval的使用 2 輪播消息提示 案例實戰一 – 輪播消息提示 3 關閉隱藏消息 案例實戰二 – 關閉隱藏消息 4 側邊欄展示 案例實戰三 – 側邊欄展示 5 tab切換實現 案例實戰四 – 登錄框&#xff08;作業&#xff09;…

react ant design樹穿梭框實現搜索并展開到子節點、同級節點選擇及同時選擇數量限制功能

功能點&#xff1a; 點擊節點前的箭頭&#xff0c;可以手動展開或折疊該節點的子節點。在搜索框中輸入關鍵詞&#xff0c;匹配的節點及其父節點會自動展開。清空搜索框后&#xff0c;恢復到用戶手動控制的展開狀態。勾選節點時仍然遵守 "最多勾選 6 個節點" 和 &quo…

阿里云云效 Maven

阿里云云效 Maven 官網&#xff1a;https://developer.aliyun.com/mvn/guide 阿里云Maven中央倉庫為 阿里云云效 提供的公共代理倉庫&#xff0c;幫助研發人員提高研發生產效率&#xff0c;使用阿里云Maven中央倉庫作為下載源&#xff0c;速度更快更穩定。 阿里云云效 是企業…

Go 語言標準庫中Channels,Goroutines詳細功能介紹與示例

在 Go 語言中&#xff0c;Goroutines&#xff08;協程&#xff09;和 Channels&#xff08;通道&#xff09;是并發編程的核心組件。它們共同協作&#xff0c;簡化了并發任務的管理和數據同步。以下通過詳細示例說明它們的用法和常見模式。 1. Goroutines&#xff08;協程&…

如何在 Postman 中正確設置 Session 以維持用戶狀態?

在 Postman 里面設置有 session 的請求。如果你還不知道什么是 session&#xff0c;那么請看這里—— session 是一種記錄客戶端和服務器之間狀態的機制&#xff0c;用于保持用戶的登錄狀態或者其他數據&#xff0c;從而讓用戶在不同頁面之間保持一致的體驗。 Postman 設置帶 …

DQN與PPO在算法層面的核心區別

DQN與PPO在算法層面的核心區別 1. 學習目標不同 DQN(基于價值): 核心:學習動作價值函數 Q ( s , a ) Q(s, a)

Linux: 網絡,arp的數量為什么會對交換機/路由器有性能的影響

這個問題也是非常普遍的問題。比如最近比較火的一個OVS相關的問題: ARP request packets put high pressure on the pinctrl thread in ovn-controller 另一個在工作種也遇到了相似的問題,當一個網絡里發了同時發了小一百個GARP之后,路由器的gateway就會有ARP處理延遲。 A…

解析 HTML 網站架構規范

2025/3/28 向全棧工程師邁進&#xff01; 一、網頁基本的組成部分 網頁的外觀多種多樣&#xff0c;但是除了全屏視頻或游戲&#xff0c;或藝術作品頁面&#xff0c;或只是結構不當的頁面以外&#xff0c;都傾向于使用類似的標準組件。 1.1頁眉 通常橫跨于整個頁面頂部有一…

Golang 當中 byte 和 rune 類型的區別

文章目錄 Golang 當中 byte 和 rune 類型的區別類型定義與用途字符串處理差異內存占用典型引用場景 Golang 當中 byte 和 rune 類型的區別 在 Golang 中&#xff0c;rune 和 byte 類型的區別主要體現在字符處理的方式和編碼支持上。 類型定義與用途 byte 類型 本質是 uint8…

vue將頁面導出成word

方法一&#xff1a;使用 html-docx-js html-docx-js 是一個輕量級的庫&#xff0c;可以將 HTML 轉換為 Word 文檔。 安裝依賴 首先安裝 html-docx-js&#xff1a; Bash深色版本 npm install html-docx-js --save創建導出邏輯 在 Vue 組件中實現導出功能的代碼如下&#xff1…

Three.js 快速入門教程【二十】3D模型加載優化實戰:使用gltf-pipeline與Draco對模型進行壓縮,提高加載速度和流暢性

系列文章目錄 Three.js 快速入門教程【一】開啟你的 3D Web 開發之旅 Three.js 快速入門教程【二】透視投影相機 Three.js 快速入門教程【三】渲染器 Three.js 快速入門教程【四】三維坐標系 Three.js 快速入門教程【五】動畫渲染循環 Three.js 快速入門教程【六】相機控件 Or…

前端框架入門:Angular

Angular 是由 Google 維護的前端框架,適用于構建單頁應用(SPA)。它使用TypeScript 作為主要開發語言,并提供了強大的模塊化、依賴注入(DI)、路由管理等特性。 一、Angular 基礎 1. Angular 介紹 Angular 是一個組件化、模塊化、雙向數據綁定的前端框架,適用于構建復雜…

基于51單片機的速度檢測報警器proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1I7roZEjrk349Is_YdMcsxQ 提取碼&#xff1a;1234 仿真圖&#xff1a; 芯片/模塊的特點&#xff1a; AT89C52/AT89C51簡介&#xff1a; AT89C51 是一款常用的 8 位單片機&#xff0c;由 Atmel 公司&#xff08;現已被 Microchip 收…

具身系列——Diffusion Policy算法實現CartPole游戲

代碼原理分析 1. 核心思想 該代碼實現了一個基于擴散模型&#xff08;Diffusion Model&#xff09;的強化學習策略網絡。擴散模型通過逐步去噪過程生成動作&#xff0c;核心思想是&#xff1a; ? 前向過程&#xff1a;通過T步逐漸將專家動作添加高斯噪聲&#xff0c;最終變成…

DeepSeek 本地化部署教程

1 概述 1.1 配置參考圖 科普&#xff1a; B&#xff0c;Billion&#xff08;十億&#xff09;&#xff0c;是 “參數量” 的單位。 模型量超過 一億&#xff0c;可稱之為 “大模型”。 2 軟件安裝 2.1 下載 Ollama 官方主頁&#xff1a;https://ollama.com/download主頁截圖…

matlab打開兩個工程

1、問題描述 寫代碼時&#xff0c;需要實時參考別人的代碼&#xff0c;需要同時打開2個模型&#xff0c;當模型在同一個工程內時&#xff0c;這是可以直接打開的&#xff0c;如圖所示 2、解決方案 再打開一個MATLAB主窗口 這個時候就可以同時打開多個模型了 3、正確的打開方…

mac 下配置flutter 總是失敗,請參考文章重新配置flutter 環境MacOS Flutter環境配置和安裝

一、安裝和運行Flutter的系統環境要求 想要安裝并運行 Flutter&#xff0c;你的開發環境需要最低滿足以下要求&#xff1a; 操作系統:macOS磁盤空間:2.8 GB(不包括IDE/tools的磁盤空間)。工具:Flutter使用git進行安裝和升級。我們建議安裝Xcode&#xff0c;其中包括git&#x…

第4.1節:使用正則表達式

1 第4.1節&#xff1a;使用正則表達式 將正則表達式用斜杠括起來&#xff0c;就能用作模式。隨后&#xff0c;該正則表達式會與每條輸入記錄的完整文本進行比對。&#xff08;通常情況下&#xff0c;它只需匹配文本的部分內容就能視作匹配成功。&#xff09;例如&#xff0c;以…

Java 代理(一) 靜態代理

學習代理的設計模式的時候&#xff0c;經常碰到的一個經典場景就是想統計某個方法的執行時間。 1 靜態代理模式的產生 需求1. 統計方法執行時間 統計方法執行時間&#xff0c;在很多API/性能監控中都有這個需求。 下面以簡單的計算器為例子&#xff0c;計算加法耗時。代碼如下…