用Python Pandas高效操作數據庫:從查詢到寫入的完整指南

一、環境準備與數據庫連接

1.1 安裝依賴庫

pip install pandas sqlalchemy psycopg2  # PostgreSQL
# 或
pip install pandas sqlalchemy pymysql  # MySQL
# 或
pip install pandas sqlalchemy          # SQLite

1.2 創建數據庫引擎

通過SQLAlchemy創建統一接口:

from sqlalchemy import create_engine# PostgreSQL示例
engine = create_engine('postgresql+psycopg2://user:password@host:port/dbname')# MySQL示例 
engine = create_engine('mysql+pymysql://user:password@host:port/dbname')# SQLite示例
engine = create_engine('sqlite:///mydatabase.db')

二、數據庫讀取操作

2.1 讀取整張表

import pandas as pd# 讀取users表全部數據
df = pd.read_sql('users', con=engine)
print(df.head())

2.2 執行復雜查詢

query = """
SELECT user_id, COUNT(order_id) AS order_count,SUM(amount) AS total_spent
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY user_id
HAVING total_spent > 1000
"""result_df = pd.read_sql(query, con=engine)

2.3 分塊讀取大數據集

chunk_size = 10000
chunks = pd.read_sql('large_table', con=engine, chunksize=chunk_size)for chunk in chunks:process_chunk(chunk)  # 自定義處理函數

三、數據寫入數據庫

3.1 整表寫入

# 將DataFrame寫入新表
df.to_sql('new_table', con=engine, if_exists='replace',  # 存在則替換index=False
)

3.2 追加寫入模式

# 追加數據到現有表
df.to_sql('existing_table',con=engine,if_exists='append',index=False
)

3.3 批量寫入優化

# 使用method='multi'加速寫入
df.to_sql('high_perf_table',con=engine,if_exists='append',index=False,method='multi', chunksize=1000
)

四、高級技巧與性能優化

4.1 數據類型映射

自定義類型轉換保證數據一致性:

Pandas類型SQL類型(PostgreSQL)處理方案
objectVARCHAR自動轉換
int64BIGINT檢查數值范圍
datetime64TIMESTAMP指定dtype參數
categoryENUM手動創建ENUM類型
from sqlalchemy.dialects.postgresql import VARCHAR, INTEGERdtype = {'user_name': VARCHAR(50),'age': INTEGER
}df.to_sql('users', engine, dtype=dtype, index=False)

4.2 事務管理

from sqlalchemy import textwith engine.begin() as conn:# 刪除舊數據conn.execute(text("DELETE FROM temp_table WHERE create_date < '2023-01-01'"))# 寫入新數據df.to_sql('temp_table', con=conn, if_exists='append', index=False)

4.3 并行處理加速

from concurrent.futures import ThreadPoolExecutordef write_chunk(chunk):chunk.to_sql('parallel_table', engine, if_exists='append', index=False)with ThreadPoolExecutor(max_workers=4) as executor:chunks = np.array_split(df, 8)executor.map(write_chunk, chunks)

五、常見問題解決方案

5.1 編碼問題處理

# 指定連接編碼
engine = create_engine('mysql+pymysql://user:pass@host/db',connect_args={'charset': 'utf8mb4'}
)

5.2 日期時間處理

# 讀取時轉換時區
df = pd.read_sql('SELECT * FROM events',con=engine,parse_dates={'event_time': {'utc': True}}
)# 寫入時指定時區
from sqlalchemy import DateTime
dtype = {'event_time': DateTime(timezone=True)}

5.3 內存優化

# 指定低精度類型
dtype = {'price': sqlalchemy.Numeric(10,2),'quantity': sqlalchemy.SmallInteger
}df.to_sql('products', engine, dtype=dtype)

六、完整工作流示例

mermaid:

graph LR
A[數據庫連接] --> B[執行SQL查詢]
B --> C[獲取DataFrame]
C --> D[數據清洗轉換]
D --> E[分析處理]
E --> F[結果寫入數據庫]

七、性能對比測試

數據規模直接寫入(秒)批量寫入(秒)提升比例
10萬條45.212.372.8%
100萬條432.189.779.2%
1000萬條內存溢出256.4-

八、最佳實踐總結

  1. 連接管理:始終使用上下文管理器確保連接關閉

  2. 類型聲明:顯式定義字段類型避免隱式轉換

  3. 批量操作:合理設置chunksize提升吞吐量

  4. 索引優化:為查詢字段添加數據庫索引

  5. 錯誤處理:添加重試機制應對網絡波動

完整示例代碼倉庫:GitHub鏈接
擴展閱讀:《Pandas高效數據處理技巧》


通過掌握這些核心技巧,您可以將Pandas的靈活數據處理能力與數據庫的強大存儲管理完美結合,構建高效可靠的數據流水線。

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

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

相關文章

每日一題(小白)暴力娛樂篇31

首先分析一下題意&#xff0c;需要求出2024的因子&#xff0c;因為我們要求與2024互質的數字&#xff0c;為什么呢&#xff1f;因為我們要求互質說直白點就是我和你兩個人沒有中間人&#xff0c;我們是自然而然認識的&#xff0c;那我們怎么認識呢&#xff0c;就是直接見面對吧…

電控---printf重定向輸出

在嵌入式系統開發中&#xff0c;printf 重定向輸出是將標準輸出&#xff08;stdout&#xff09;從默認設備&#xff08;如主機終端&#xff09;重新映射到嵌入式設備的特定硬件接口&#xff08;如串口、LCD、USB等&#xff09;的過程。 一、核心原理&#xff1a;標準IO庫的底層…

快速認識:數據庫、數倉(數據倉庫)、數據湖與數據運河

數據技術核心概念對比表 概念核心定義核心功能數據特征典型技術/工具核心應用場景數據庫結構化數據的「電子檔案柜」&#xff0c;按固定 schema 存儲和管理數據&#xff0c;支持高效讀寫和事務處理。實時事務處理&#xff08;增刪改查&#xff09;&#xff0c;確保數據一致性&…

【17】數據結構之圖的遍歷篇章

目錄標題 圖的遍歷深度優先遍歷 Depth First Search廣度優先遍歷 Breadth First Search 圖的遍歷 從圖中某一個頂點出發&#xff0c;沿著一些邊訪遍圖中所有的頂點&#xff0c;且使用每個頂點僅被訪問一次&#xff0c;這個過程稱為圖的遍歷.Graph Traversal. 其中&#xff0c…

簡單接口工具(ApiCraft-Web)

ApiCraft-Web 項目介紹 ApiCraft-Web 是一個輕量級的 API 測試工具&#xff0c;提供了簡潔直觀的界面&#xff0c;幫助開發者快速測試和調試 HTTP 接口。 功能特點 支持多種 HTTP 請求方法&#xff08;GET、POST、PUT、DELETE&#xff09;可配置請求參數&#xff08;Query …

Git進階操作

Git高階操作完全指南&#xff1a;解鎖專業開發工作流 前言 在當今的軟件開發領域&#xff0c;掌握高級Git技能已成為區分普通開發者與專業開發者的關鍵因素。根據最新的GitHub數據&#xff0c;熟練應用交互式暫存和Rebase等高級功能的開發者&#xff0c;其代碼審查通過率平均提…

Python結合AI生成圖像藝術作品代碼及介紹

為實現生成圖像藝術作品&#xff0c;我選用 Stable Diffusion 庫結合 Python 編寫代碼。下面先展示代碼&#xff0c;再詳細介紹其原理、模塊及使用方法等內容。 生成圖片代碼 import torch from diffusers import StableDiffusionPipeline# 加載預訓練模型 pipe StableDiffu…

Linux操作系統--靜態庫和動態庫的生成and四種解決加載找不到動態庫的四種方法

目錄 必要的知識儲備&#xff1a; 生成靜態庫&#xff1a; 生成動態庫&#xff1a; 解決加載找不到動態庫的四種方法&#xff1a; 第一種&#xff1a;拷貝到系統默認的庫路徑 /usr/lib64/ 第二種&#xff1a;在系統默認的庫路徑/usr/lib64/下建立軟鏈接 第三種&#xff1…

LLM中的N-Gram、TF-IDF和Word embedding

文章目錄 1. N-Gram和TF-IDF&#xff1a;通俗易懂的解析1.1 N-Gram&#xff1a;讓AI學會"猜詞"的技術1.1.1 基本概念1.1.2 工作原理1.1.3 常見類型1.1.4 應用場景1.1.5 優缺點 1.2 TF-IDF&#xff1a;衡量詞語重要性的尺子1.2.1 基本概念1.2.2 計算公式1.2.3 為什么需…

Leetcode 3359. 查找最大元素不超過 K 的有序子矩陣【Plus題】

1.題目基本信息 1.1.題目描述 給定一個大小為 m x n 的二維矩陣 grid。同時給定一個 非負整數 k。 返回滿足下列條件的 grid 的子矩陣數量&#xff1a; 子矩陣中最大的元素 小于等于 k。 子矩陣的每一行都以 非遞增 順序排序。 矩陣的子矩陣 (x1, y1, x2, y2) 是通過選擇…

如何在 Ubuntu 22.04 上安裝、配置、使用 Nginx

如何在 Ubuntu 22.04 上安裝、配置、使用 Nginx&#xff1f;-阿里云開發者社區 更新應用 sudo apt updatesudo apt upgrade檢查必要依賴并安裝 sudo apt install -y curl gnupg2 ca-certificates lsb-release安裝nginx sudo apt install -y nginx# 啟動nginx sudo systemct…

Linux:顯示 -bash-4.2$ 問題(CentOS 7)

文章目錄 一、原因二、錯誤示例三、解決辦法 一、原因 在 CentOS 7 系統中&#xff0c;如果你看到命令行提示符顯示為 -bash-4.2$&#xff0c;一般是 Bash shell 正在運行&#xff0c;并且它沒有找到用戶的個人配置文件&#xff0c;或者這些文件有問題而未能成功加載。這個提示…

QT6 源(34):隨機數生成器類 QRandomGenerator 的源碼閱讀

&#xff08;1&#xff09;代碼來自 qrandom.h &#xff0c;結合官方的注釋&#xff1a; #ifndef QRANDOM_H #define QRANDOM_H#include <QtCore/qalgorithms.h> #include <algorithm> // for std::generate #include <random> // for std::mt1993…

第二篇:linux之Xshell使用及相關linux操作

第二篇&#xff1a;linux之Xshell使用及相關linux操作 文章目錄 第二篇&#xff1a;linux之Xshell使用及相關linux操作一、Xshell使用1、Xshell安裝2、Xshell使用 二、Bash Shell介紹與使用1、什么是Bash Shell(殼)&#xff1f;2、Bash Shell能干什么&#xff1f;3、平時如何使…

MCP(模型上下文協議)學習筆記

學習MCP&#xff08;模型上下文協議&#xff09;的系統化路徑&#xff0c;結合技術原理、工具實踐和社區資源&#xff0c;幫助你高效掌握這一AI交互標準&#xff1a; 在當今人工智能飛速發展的時代&#xff0c;AI技術正以前所未有的速度改變著我們的生活和工作方式。然而&#…

MIR-2025 | 多模態知識助力機器人導航:從復雜環境到高效路徑規劃

作者&#xff1a;Hui Yuan, Yan Huang, Zetao Du, Naigong Yu, Ziqi Liu, Dongbo Zhang, Kun Zhang 單位&#xff1a;北京工業大學信息科學與技術學院&#xff0c;北京工業大學計算智能與智能系統北京市重點實驗室&#xff0c;中科院自動化研究所模式識別國家重點實驗室與多智…

javaSE.泛型界限

現在有一個新的需求&#xff0c;沒有String類型成績了&#xff0c;但是成績依然可能是整數&#xff0c;也可能是小數&#xff0c;這是我們不希望用戶將泛型指定為除數字類型外的其他類型&#xff0c;我們就需要使用到泛型的上界定義&#xff1a; 上界&#x1f447;只能使用其本…

壓縮包網頁預覽(zip-html-preview)

zip-html-preview 項目介紹 這是一個基于 Spring Boot 開發的在線 ZIP 文件預覽工具,主要用于預覽 ZIP 壓縮包中的 HTML 文件及其相關資源。 主要功能 支持拖拽上傳或點擊選擇多個 ZIP 文件自動解壓并提取 ZIP 文件中的 HTML 文件在線預覽 HTML 文件及其相關的 CSS、JavaSc…

QML之Overlay

Overlay&#xff08;覆蓋層&#xff09;是QML中用于在當前界面之上顯示臨時內容的重要組件。 一、Overlay基礎概念 1.1 什么是Overlay&#xff1f; Overlay是一種浮動在現有界面之上的視覺元素&#xff0c;具有以下特點&#xff1a; 臨時顯示&#xff0c;不影響底層布局 通…

iso17025證書申請方法?iso17025認證意義

ISO/IEC 17025證書申請方法 ISO/IEC 17025是檢測和校準實驗室能力的國際標準&#xff0c;申請CNAS認可的流程如下&#xff1a; 1. 前期準備 標準學習&#xff1a;深入理解ISO/IEC 17025:2017標準要求。 差距分析&#xff1a;評估現有實驗室管理與技術能力與標準的差距。 制…