「日拱一碼」014 Python常用庫——Pandas

目錄

數據結構

?pandas.Series :一維數組,類似于數組,但索引可以是任意類型,而不僅僅是整數

pandas.DataFrame :二維表格型數據結構,類似于 Excel 表格,每列可以是不同的數據類型

數據讀取與寫入

讀取數據

?pd.read_csv() :讀取 CSV 文件

pd.read_excel() :讀取 Excel 文件

pd.read_sql() :從數據庫讀取數據

寫入數據

?DataFrame.to_csv() :將數據寫入 CSV 文件

DataFrame.to_excel() :將數據寫入 Excel 文件

DataFrame.to_sql() :將數據寫入數據庫

?數據選擇與索引

基于標簽的索引

DataFrame.loc :按標簽選擇數據

Series.loc :按標簽選擇數據

基于位置的索引

DataFrame.iloc :按位置選擇數據

Series.iloc :按位置選擇數據

布爾索引

數據清洗與預處理

處理缺失值

DataFrame.dropna() :刪除缺失值

DataFrame.fillna() :填充缺失值

數據類型轉換

DataFrame.astype() :轉換數據類型

重復數據處理

DataFrame.drop_duplicates() :刪除重復數據

數據分組與聚合

?分組

DataFrame.groupby() :對數據進行分組

聚合

GroupBy.sum() :計算每組的總和

GroupBy.mean() :計算每組的平均值

GroupBy.agg() :自定義聚合函數

數據合并與連接

合并

pd.concat() :沿特定軸連接多個對象

DataFrame.merge() :基于共同列合并數據

連接

?DataFrame.join() :按索引連接兩個對象

數據排序與排名

排序

DataFrame.sort_values() :按值排序

DataFrame.sort_index() :按索引排序

排名

DataFrame.rank() :對數據進行排名

數據時間序列

時間序列創建

pd.date_range() :創建日期范圍

?pd.to_datetime() :將字符串轉換為日期時間格式

時間序列操作

DataFrame.resample() :對時間序列數據進行重采樣

DataFrame.shift() :將數據沿時間軸移動

數據可視化

DataFrame.plot() :繪制數據圖表

Series.plot() :繪制序列圖表


Pandas 是 Python 中一個功能強大的數據分析庫,它提供了大量用于數據處理、分析和轉換的方法。以下按照不同的功能類別詳細介紹 Pandas 庫中常用的方法:

數據結構

  • ?pandas.Series :一維數組,類似于數組,但索引可以是任意類型,而不僅僅是整數
  • pandas.DataFrame :二維表格型數據結構,類似于 Excel 表格,每列可以是不同的數據類型
## 數據結構
import pandas as pd# 創建 Series, s.index獲取索引, s.values獲取數據值
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s)
# a    1
# b    2
# c    3
# dtype: int64print(s.index)  # Index(['a', 'b', 'c'], dtype='object')
print(s.values)  # [1 2 3]# 創建 DataFrame, df.index獲取行索引, df.columns獲取列索引, df.values獲取數據值
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6print(df.index)  # RangeIndex(start=0, stop=3, step=1)
print(df.columns)  # Index(['A', 'B'], dtype='object')
print(df.values)
# [[1 4]
#  [2 5]
#  [3 6]]

數據讀取與寫入

讀取數據

  • ?pd.read_csv() :讀取 CSV 文件
  • pd.read_excel() :讀取 Excel 文件
  • pd.read_sql() :從數據庫讀取數據
## 數據讀取與寫入
# 讀取數據
import pandas as pd
import sqlite3# 讀取 CSV 文件
df = pd.read_csv('data.csv')
print(df)# 讀取 Excel 文件
df = pd.read_excel('data.xlsx')
print(df)# 從 SQLite 數據庫讀取數據
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
print(df)

寫入數據

  • ?DataFrame.to_csv() :將數據寫入 CSV 文件
  • DataFrame.to_excel() :將數據寫入 Excel 文件
  • DataFrame.to_sql() :將數據寫入數據庫
# 寫入數據
import pandas as pd
import sqlite3# 寫入 CSV 文件
df.to_csv('output.csv', index=False)# 寫入 Excel 文件
df.to_excel('output.xlsx', index=False)# 將數據寫入 SQLite 數據庫
df.to_sql('table_name', conn, if_exists='replace', index=False)

?數據選擇與索引

基于標簽的索引

  • DataFrame.loc :按標簽選擇數據
## 數據選擇與索引# 按標簽選擇數據
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['row1', 'row2', 'row3'])
print("原始 DataFrame:")
print(df)
#       A  B
# row1  1  4
# row2  2  5
# row3  3  6# 按標簽選擇單個元素
print("\n選擇 'row1' 行和 'A' 列的元素:")
print(df.loc['row1', 'A'])  # 1# 按標簽選擇多行和多列
print("\n選擇 'row1' 和 'row2' 行,以及 'A' 和 'B' 列:")
print(df.loc[['row1', 'row2'], ['A', 'B']])
#       A  B
# row1  1  4
# row2  2  5# 按標簽選擇所有行,但只選擇特定列
print("\n選擇所有行,但只選擇 'B' 列:")
print(df.loc[:, 'B'])
# row1    4
# row2    5
# row3    6
# Name: B, dtype: int64
  • Series.loc :按標簽選擇數據
# 創建一個 Series
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print("\n原始 Series:")
print(s)
# 原始 Series:
# a    1
# b    2
# c    3
# dtype: int64# 按標簽選擇單個元素
print("\n選擇 'a' 索引的元素:")
print(s.loc['a'])  # 1# 按標簽選擇多個元素
print("\n選擇 'a' 和 'c' 索引的元素:")
print(s.loc[['a', 'c']])
# a    1
# c    3
# dtype: int64

基于位置的索引

  • DataFrame.iloc :按位置選擇數據
# 基于位置的索引
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print("原始 DataFrame:")
print(df)
#    A  B
# 0  1  4
# 1  2  5
# 2  3  6# 按位置選擇單個元素
print("\n選擇第1行第1列的元素:")
print(df.iloc[0, 0])  # 1# 按位置選擇多行和多列
print("\n選擇第1行和第2行,以及第0列和第1列:")
print(df.iloc[[0, 1], [0, 1]])
#    A  B
# 0  1  4
# 1  2  5# 按位置選擇所有行,但只選擇特定列
print("\n選擇所有行,但只選擇第1列:")
print(df.iloc[:, 1])
# 0    4
# 1    5
# 2    6
# Name: B, dtype: int64
  • Series.iloc :按位置選擇數據
# 創建一個 Series
s = pd.Series([1, 2, 3])
print("\n原始 Series:")
print(s)
# 0    1
# 1    2
# 2    3
# dtype: int64# 按位置選擇單個元素
print("\n選擇第0個位置的元素:")
print(s.iloc[0])  # 1# 按位置選擇多個元素
print("\n選擇第0個和第2個位置的元素:")
print(s.iloc[[0, 2]])
# 0    1
# 2    3
# dtype: int64

布爾索引

根據條件篩選數據

# 根據條件篩選數據
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
filtered_df = df[df['A'] > 2]
print(filtered_df)
# dtype: int64
#    A  B
# 2  3  6

數據清洗與預處理

處理缺失值

  • DataFrame.dropna() :刪除缺失值
  • DataFrame.fillna() :填充缺失值

數據類型轉換

  • DataFrame.astype() :轉換數據類型

重復數據處理

  • DataFrame.drop_duplicates() :刪除重復數據
## 數據清洗與預處理# 刪除缺失值
df.dropna(inplace=True)
# 填充缺失值
df.fillna(0, inplace=True)# 轉換數據類型
df['A'] = df['A'].astype('int')
# 刪除重復數據
df.drop_duplicates(inplace=True)

數據分組與聚合

?分組

  • DataFrame.groupby() :對數據進行分組

聚合

  • GroupBy.sum() :計算每組的總和
  • GroupBy.mean() :計算每組的平均值
  • GroupBy.agg() :自定義聚合函數
## 數據分組與聚合# 對數據進行分組
grouped = df.groupby('column_name')# 計算每組的總和
grouped.sum()# 計算每組的平均值
grouped.mean()# 自定義聚合函數
grouped.agg(['mean', 'sum', 'max'])

數據合并與連接

合并

  • pd.concat() :沿特定軸連接多個對象
  • DataFrame.merge() :基于共同列合并數據
## 數據合并與連接
# 合并
# 沿特定軸連接多個對象, 0行1列
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concatenated_df = pd.concat([df1, df2], axis=0)
print(concatenated_df)
#    A  B
# 0  1  3
# 1  2  4
# 0  5  7
# 1  6  8# 基于共同列合并數據
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [1, 2], 'C': [5, 6]})
merged_df = df1.merge(df2, on='A')
print(merged_df)
#    A  B  C
# 0  1  3  5
# 1  2  4  6

連接

  • ?DataFrame.join() :按索引連接兩個對象
# 連接
# 按索引連接兩個對象, lsuffix和rsuffix是當列名沖突時在后添加后綴,以便區分
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(joined_df)

數據排序與排名

排序

  • DataFrame.sort_values() :按值排序
  • DataFrame.sort_index() :按索引排序
## 數據排序與排名# 排序
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
sorted_df = df.sort_values('A', ascending=False)
print(sorted_df)
#    A  B
# 1  2  4
# 0  1  3# 按索引排序
sorted_df = df.sort_index()
print(sorted_df)
#    A  B
# 0  1  3
# 1  2  4

排名

  • DataFrame.rank() :對數據進行排名
# 排名
df = pd.DataFrame({'A': [2, 1, 3], 'B': [4, 6, 5]})
# 對數據進行排名
ranked_df = df.rank()
print(ranked_df)
#      A    B
# 0  2.0  1.0
# 1  1.0  3.0
# 2  3.0  2.0

數據時間序列

時間序列創建

  • pd.date_range() :創建日期范圍
  • ?pd.to_datetime() :將字符串轉換為日期時間格式
## 數據時間序列
# 時間序列創建
# 創建日期范圍
dates = pd.date_range(start='2025-07-01', end='2025-08-1')
print(dates)
# DatetimeIndex(['2025-07-01', '2025-07-02', '2025-07-03', '2025-07-04',
#                '2025-07-05', '2025-07-06', '2025-07-07', '2025-07-08',
#                '2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12',
#                '2025-07-13', '2025-07-14', '2025-07-15', '2025-07-16',
#                '2025-07-17', '2025-07-18', '2025-07-19', '2025-07-20',
#                '2025-07-21', '2025-07-22', '2025-07-23', '2025-07-24',
#                '2025-07-25', '2025-07-26', '2025-07-27', '2025-07-28',
#                '2025-07-29', '2025-07-30', '2025-07-31', '2025-08-01'],
#               dtype='datetime64[ns]', freq='D')# 將字符串轉換為日期時間格式
date = pd.to_datetime('2025-07-01')
print(date)  # 2025-07-01 00:00:00

時間序列操作

  • DataFrame.resample() :對時間序列數據進行重采樣
  • DataFrame.shift() :將數據沿時間軸移動
# 對時間序列數據進行重采樣
dates = pd.date_range(start='2025-07-01', end='2025-07-4')
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=dates)
resampled_df = df.resample('M').mean()
print(resampled_df)
#             value
# 2025-07-31    2.5# 將數據沿時間軸移動
shifted_df = df.shift(periods=1, freq='D')
print(shifted_df)
#             value
# 2025-07-02      1
# 2025-07-03      2
# 2025-07-04      3
# 2025-07-05      4

數據可視化

  • DataFrame.plot() :繪制數據圖表
## 數據可視化
# 繪制數據圖表
import matplotlib.pyplot as pltdf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.plot(kind='line', x='A', y='B')
plt.show()

?

  • Series.plot() :繪制序列圖表
# 繪制序列圖表
import matplotlib.pyplot as plts = pd.Series([1, 2, 3])
s.plot(kind='bar')
plt.show()

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

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

相關文章

狂命爆肝21天,共51K字的JAVA學習筆記奉上,JAVA從入門到精通一文搞定,一文在手JAVA無憂

背景知識 Java 相關概念 JavaSE (Java Standard Edition): 基礎版,用于開發桌面應用程序。JavaEE (Java Enterprise Edition): 企業版,用于開發企業級應用程序。JavaME (Java Micro Edition): 微型版,用于開發嵌入式系統和移動設備應用程序…

Dijkstra 算法#圖論

Dijkstra 算法 算法前提:在沒有負邊的情況下使用。算法思路:將結點分成已確定最短路長度的點集 S 和未確定最短路長度的點集 T,每次從 T 集合中選取最短路長度最小的結點移到 S 集合中,并對其出邊執行更新操作 從T集合中&#x…

開源與閉源大模型的生態與技術對比:以百度文心4.5開源為視角

技術對比:開源與閉源大模型的優劣勢 性能對比:算力效率與場景適配的博弈 在模型性能的競技場上,開源與閉源大模型呈現出明顯的差異化特征。以百度文心4.5開源系列為例,其47B參數的混合專家(MoE)模型在飛槳…

企業電商解決方案哪家好?ZKmall模塊商城全渠道支持 + 定制化服務更省心

在數字化浪潮席卷各行各業的當下,企業要想拓展市場、提升競爭力,搭建專屬電商平臺已經成了繞不開的選擇。但市場上的電商解決方案五花八門,怎么才能挑到真正適合自己的?其實道理很簡單:能同時搞定全渠道支持和定制化服…

使用哪種語言的人更容易通過面試?

Ruby 和 Swift!似乎語言越大眾面試通過率越低,畢竟崗位數量有限,Java 和 C 程序員所面對的競爭也會更加激烈。使用 Ruby 和 Swift 的程序員比例到底怎么樣?我們可以從 Google Trends 中發現一些蛛絲馬跡。最火熱的 Java 的熱度平均…

Axios 二次封裝高級教程(含請求取消等功能)

Axios 二次封裝高級教程(含請求取消等功能) 整理不易,收藏、點贊、關注哦! 一、總體架構設計 目的:構建一套功能完善、易用且健壯的 HTTP 請求封裝層 核心功能: 請求攔截、響應攔截請求取消(防…

MobileNet V1的Pytorch實現并加載預訓練模型進行驗證

一. 環境 windonws 11RTX5060CUDA 12.8Pytorch 2.9.0dev20250630cu128torchvision 0.23.0dev20250701cu128 二. 代碼 基于Mobilenet-CustomData 的Mobilenet_Pretrain.ipynb 1. 定義Mobile Net V1 import os import time import torch import torch.nn as nn import torch…

HTTP協議利用TCP的特性來實現長連接

在討論網絡協議時,經常會有人提出這樣一個問題:“既然HTTP是基于TCP的,而TCP本身支持長連接,為什么HTTP不支持長連接?”這種說法其實是一種誤解。實際上,HTTP確實可以并且經常使用長連接(也稱為持久連接)。 什么是長連接? 首先,我們需要明確什么是“長連接”。在網…

整流電路Multisim電路仿真實驗匯總——硬件工程師筆記

目錄 1 整流電路基礎 1.1 整流電路基本原理 1.2 整流電路的類型 1.2.1 單相整流電路 1.2.2 三相整流電路 1.3 整流電路的應用 1.3.1 直流電源 1.3.2 電池充電器 1.3.3 變頻調速系統 1.34 電解和電鍍 1.4 整流電路的優缺點 1.4.1 優點 1.4.2 缺點 2 二極管整流電路…

LangChain 全面入門

什么是 LangChain? LangChain 是一個專門為 大語言模型 (LLM) 應用開發設計的開源框架,幫你快速實現: ? 多輪對話 ? 知識庫問答 (RAG) ? 多工具協同調用 (function calling / tool) ? 智能體 Agent 自動決策任務鏈 解耦 LLM 接口、Prom…

RabbitMQ 高級特性之消息確認

1. 簡介 RabbitMQ 的消息發送流程: producer 將消息發送給 broker,consumer 從 broker 中獲取消息并消費 那么在這里就涉及到了兩種消息發送,即 producer 與 broker 之間和 consumer 與 broker 之間。 “消息確認” 討論的是 consumer 與…

【51單片機用數碼管顯示流水燈的種類是按鈕控制數碼管加一和流水燈】2022-6-14

緣由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共陰0~F消隱減號 unsigned char Js0, miao0;//中斷計時 秒 分 時 毫秒 sbit k0P3^0; sbit k1P3^1; void smxs(u…

Android15 開機動畫播放結束之后如何直接啟動應用

問題背景 軟件版本:Android15 在一些需求場景里面,需要開機動畫播放結束立馬去啟動一個應用,下面介紹如何實現這種方案。 解決方案 首選我們需要知道開機動畫播放結束之后的流程,這里會調用到wms里面,也就是一些enableScreen之類的函數,知道這個大概流程之后,再去對應…

AI實踐:大模型痛點和解決方案討論

大家好,我是星野,歡迎來到我的CSDN博客。在這個技術日新月異的時代,我們一起學習,共同進步。 今天想和大家分享的是大模型在實際應用中的痛點以及解決方案,特別是RAG(檢索增強生成)技術。 大模…

Web前端工程化

Web前端工程化 前端工程化是指將軟件工程的方法和原則應用到前端開發中,以提高開發效率、保證代碼質量、便于團隊協作和項目維護的一套體系化實踐。以下是前端工程化的主要內容和實踐: 核心組成部分 1. 模塊化開發 JavaScript模塊化:Comm…

Java 原生 HTTP Client

?介紹 Java 原生 HttpClient 是從 Java 11 開始引入的標準庫,用于簡化 HTTP 請求的發送與響應處理。它支持同步和異步請求,并內置對 HTTP/1.1 和 HTTP/2 協議的支持。HttpClient 提供了易用的 API 來設置請求頭、請求體、處理響應以及配置 SSL/TLS 加密…

【C語言刷題】第十天:加量加餐繼續,代碼題訓練,融會貫通IO模式

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 🍉學習方向:C/C方向 ??人生格言:為天地立心,為生民立命,為…

【WEB】Polar靶場 6-10題 詳細筆記

六.jwt 這題我又不會寫 先來了解下jwt **JWT(JSON Web Token)**是一種基于JSON的開放標準(RFC 7519),主要用于在網絡應用環境間傳遞聲明信息。JWT通常用于身份驗證和信息交換,確保在各方之間安全地傳輸信…

高階亞馬遜運營秘籍:關鍵詞矩陣打法深度解析與應用

當競爭對手還在為單個大詞競價廝殺時,頭部賣家已悄然構建了一張覆蓋數千長尾關鍵詞的隱形網絡,精準觸達每一個細分需求,以更低的成本撬動更高的轉化率在亞馬遜流量紅利消退、廣告成本高企的2025年,傳統“爆款關鍵詞”打法已顯疲態…

【問題解決】org.springframework.web.util.NestedServletException Handler dispatch failed;

詳細異常信息: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at org.springframework.web.servlet.DispatcherServlet.doDispatch(Disp…