最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)分析神器DuckDB保姆級使用入門指南

 更新時(shí)間:2026年01月05日 09:24:36   作者:小莊-Python辦公  
DuckDB被譽(yù)為數(shù)據(jù)分析界的SQLite,以安裝極其簡單、運(yùn)行速度飛快、直接查詢文件而著稱,本文將帶你從零開始,掌握這個?Python?辦公自動化領(lǐng)域的新晉頂流吧

在日常辦公和數(shù)據(jù)分析中,你是否遇到過以下場景:

  • 打開一個幾百兆的 CSV 文件,Excel 直接卡死或轉(zhuǎn)圈半小時(shí)?
  • 想要對多個表格進(jìn)行合并統(tǒng)計(jì),VLOOKUP 公式寫到手軟?
  • 覺得安裝 MySQL、PostgreSQL 等大型數(shù)據(jù)庫太麻煩,只想在本地快速處理數(shù)據(jù)?

如果你的答案是肯定的,那么 DuckDB 就是為你量身定制的工具。它被譽(yù)為“數(shù)據(jù)分析界的 SQLite”,以安裝極其簡單、運(yùn)行速度飛快、直接查詢文件而著稱。

本文將帶你從零開始,掌握這個 Python 辦公自動化領(lǐng)域的“新晉頂流”。

1. 什么是 DuckDB?為什么選擇它?

對于初學(xué)者,你可以這樣理解 DuckDB:

  • 它是“分析型”的 SQLite:它是一個數(shù)據(jù)庫,但不需要你配置服務(wù)器、賬號密碼。它只是一個文件,或者直接運(yùn)行在你的內(nèi)存里。
  • 它是 Excel 的超強(qiáng)替補(bǔ):Excel 處理幾十萬行數(shù)據(jù)就開始吃力,而 DuckDB 可以輕松在普通的筆記本電腦上秒級處理億級數(shù)據(jù)。
  • 它是 SQL 的練習(xí)場:它支持標(biāo)準(zhǔn)的 SQL 語法,非常適合學(xué)習(xí)數(shù)據(jù)庫查詢。

核心優(yōu)勢:

  • 無服務(wù)器(Serverless)pip install 即可使用,無需后臺服務(wù)。
  • 列式存儲(Columnar):專門為分析統(tǒng)計(jì)設(shè)計(jì),做聚合運(yùn)算(求和、平均值)比傳統(tǒng)數(shù)據(jù)庫快幾十倍。
  • 零門檻交互:可以直接用 SQL 語句查詢 CSV、Excel、Parquet 文件,甚至可以直接查詢 Python 的變量。

2. 環(huán)境準(zhǔn)備 (Prerequisites)

開始之前,請確保你的電腦上已經(jīng)安裝了 Python。

安裝 DuckDB

打開你的終端(Terminal 或 CMD),輸入以下命令:

pip install duckdb pandas

注:我們同時(shí)安裝了 pandas,因?yàn)?DuckDB 和 Pandas 配合使用簡直是天作之合。

3. DuckDB 實(shí)戰(zhàn)指南 (Step-by-Step Guide)

我們將通過四個循序漸進(jìn)的場景,帶你掌握 DuckDB 的核心用法。

場景一:Hello World —— 第一次運(yùn)行 SQL

DuckDB 最酷的地方在于,你不需要先“建庫”或“建表”,可以直接對數(shù)據(jù)進(jìn)行操作。

新建一個 Python 文件 demo_basic.py

import duckdb

# 1. 這是一個內(nèi)存數(shù)據(jù)庫,程序結(jié)束數(shù)據(jù)就會消失
# 我們可以直接運(yùn)行 SQL 語句
result = duckdb.sql("SELECT 'Hello DuckDB' AS message, 42 AS number")

# 2. 展示結(jié)果
result.show()

運(yùn)行結(jié)果:你會看到一個漂亮的表格打印在終端里。不需要 connect,不需要 cursor,一行代碼即可運(yùn)行。

場景二:直接查詢 CSV 文件 —— 告別 Excel 卡頓

假設(shè)你有一個銷售數(shù)據(jù)文件 sales.csv。在傳統(tǒng)數(shù)據(jù)庫中,你需要先創(chuàng)建表結(jié)構(gòu),然后導(dǎo)入數(shù)據(jù)。在 DuckDB 中,你可以直接把文件當(dāng)成表來查!

首先,我們用 Python 生成一個模擬的 CSV 文件:

import pandas as pd
import numpy as np

# 生成 10萬行 模擬數(shù)據(jù)
df = pd.DataFrame({
    'product': np.random.choice(['Apple', 'Banana', 'Orange'], 100000),
    'price': np.random.randint(1, 10, 100000),
    'quantity': np.random.randint(1, 5, 100000)
})
df.to_csv('sales.csv', index=False)
print("CSV 文件已生成!")

接下來,使用 DuckDB 直接分析這個 CSV

import duckdb

# 需求:統(tǒng)計(jì)每種水果的總銷售額(價(jià)格 * 數(shù)量),并按銷售額降序排列
# 注意:我們直接在 FROM 后面寫文件名!
query = """
    SELECT 
        product, 
        SUM(price * quantity) AS total_revenue 
    FROM 'sales.csv' 
    GROUP BY product 
    ORDER BY total_revenue DESC
"""

duckdb.sql(query).show()

原理解析:DuckDB 能夠智能識別 CSV 的表頭和數(shù)據(jù)類型,你不需要定義 Schema,它會自動推斷。對于幾百兆甚至幾個 G 的文件,這種方式比 Excel 快無數(shù)倍。

場景三:DuckDB 與 Pandas 的無縫銜接

這是 Python 辦公自動化中最強(qiáng)大的功能。如果你已經(jīng)有一個 Pandas 的 DataFrame 變量,你可以直接用 SQL 查詢它,而不需要把數(shù)據(jù)存入數(shù)據(jù)庫。

import duckdb
import pandas as pd

# 假設(shè)這是你從 Excel 讀取的數(shù)據(jù)
df_employee = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'dept': ['HR', 'IT', 'IT', 'HR'],
    'salary': [5000, 8000, 8500, 5200]
})

# 需求:找出 IT 部門薪資大于 8000 的人
# 這里的 'df_employee' 是 Python 變量名,DuckDB 能直接識別!
result = duckdb.sql("""
    SELECT name, salary 
    FROM df_employee 
    WHERE dept = 'IT' AND salary > 8000
""")

# 將結(jié)果轉(zhuǎn)換回 Pandas DataFrame 以便后續(xù)處理
df_result = result.df()
print(df_result)

為什么這很重要?

很多初學(xué)者覺得 Pandas 的篩選語法(如 df[(df['dept']=='IT') & ...])很難記。使用 DuckDB,你可以直接用你熟悉的 SQL 語句來操作 Pandas 數(shù)據(jù)。

場景四:數(shù)據(jù)持久化 —— 保存你的分析結(jié)果

默認(rèn)情況下,DuckDB 是運(yùn)行在內(nèi)存里的(In-Memory)。如果你想把處理好的數(shù)據(jù)保存下來,像 SQLite 一樣存成一個數(shù)據(jù)庫文件,也非常簡單。

import duckdb

# 1. 連接到一個具體的數(shù)據(jù)庫文件(如果不存在會自動創(chuàng)建)
con = duckdb.connect('my_office_data.db')

# 2. 創(chuàng)建一個表并插入數(shù)據(jù)
con.sql("CREATE TABLE IF NOT EXISTS users (id INTEGER, name VARCHAR)")
con.sql("INSERT INTO users VALUES (1, 'Zhang San'), (2, 'Li Si')")

# 3. 查詢數(shù)據(jù)
con.sql("SELECT * FROM users").show()

# 4. 關(guān)閉連接
con.close()

下次你需要使用數(shù)據(jù)時(shí),再次 connect('my_office_data.db') 即可。

4. 進(jìn)階技巧:通配符查詢 (Globbing)

在辦公場景中,我們經(jīng)常遇到文件夾里有 2023-01.csv, 2023-02.csv2023-12.csv 等一堆格式相同的文件。

使用 Pandas,你需要寫循環(huán)讀取再 concat

使用 DuckDB,只需要一行代碼:

# 這里的 list_data/*.csv 是通配符,表示讀取該目錄下所有 CSV
# DuckDB 會自動把它們合并成一張大表進(jìn)行查詢
duckdb.sql("SELECT * FROM 'list_data/*.csv' LIMIT 5").show()

5. 常見誤區(qū)與注意事項(xiàng) (Common Pitfalls)

雖然 DuckDB 很強(qiáng)大,但新手在使用時(shí)需要注意以下幾點(diǎn):

單進(jìn)程鎖定:DuckDB 是一個嵌入式數(shù)據(jù)庫(類似 SQLite)。如果你用 Python 代碼連接了 my_data.db 且沒有關(guān)閉連接(.close()),你就不能同時(shí)用另一個 Python 腳本或 DBeaver 等工具去連接同一個文件。它不支持多用戶同時(shí)寫入。

解決:確保在代碼最后關(guān)閉連接,或使用 with duckdb.connect(...) 上下文管理器。

SQL 語法差異:DuckDB 使用的是 PostgreSQL 風(fēng)格的 SQL 語法。雖然它兼容大部分標(biāo)準(zhǔn) SQL,但如果你習(xí)慣了 MySQL 的某些特有函數(shù),可能需要查閱文檔尋找對應(yīng)寫法。

內(nèi)存管理:雖然 DuckDB 支持“超大內(nèi)存數(shù)據(jù)處理”(Out-of-core processing),即數(shù)據(jù)量超過內(nèi)存大小時(shí)將數(shù)據(jù)溢出到硬盤,但在處理極大規(guī)模數(shù)據(jù)(如數(shù)百 GB)時(shí),仍需注意配置 temp_directory 以免占滿 C 盤空間。

6. 總結(jié)與資源

DuckDB 是 Python 辦公自動化領(lǐng)域的一匹黑馬。它填補(bǔ)了 Pandas(內(nèi)存受限)和 傳統(tǒng)數(shù)據(jù)庫(部署麻煩)之間的空白。

回顧一下它的核心用法:

  • duckdb.sql("SELECT ..."):快速運(yùn)行 SQL。
  • FROM 'data.csv':直接查詢文件。
  • FROM df_variable:直接查詢 Pandas 變量。

到此這篇關(guān)于Python數(shù)據(jù)分析神器DuckDB保姆級使用入門指南的文章就介紹到這了,更多相關(guān)Python DuckDB數(shù)據(jù)分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)監(jiān)控內(nèi)存使用情況和代碼執(zhí)行時(shí)間

    Python實(shí)現(xiàn)監(jiān)控內(nèi)存使用情況和代碼執(zhí)行時(shí)間

    我的代碼的哪些部分運(yùn)行時(shí)間最長、內(nèi)存最多?我怎樣才能找到需要改進(jìn)的地方?在開發(fā)過程中,我很確定我們大多數(shù)人都會想知道這一點(diǎn)。本文總結(jié)了一些方法來監(jiān)控?Python?代碼的時(shí)間和內(nèi)存使用情況,希望對大家有所幫助
    2023-01-01
  • Django中模版的子目錄與include標(biāo)簽的使用方法

    Django中模版的子目錄與include標(biāo)簽的使用方法

    這篇文章主要介紹了Django中模版的子目錄與include標(biāo)簽的使用方法,有利于Python的Django框架的模版布局,需要的朋友可以參考下
    2015-07-07
  • Python3基礎(chǔ)教程之遞歸函數(shù)簡單示例

    Python3基礎(chǔ)教程之遞歸函數(shù)簡單示例

    這篇文章主要給大家介紹了關(guān)于Python3基礎(chǔ)教程之遞歸函數(shù)簡單示例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python批量修改文件編碼格式的方法

    python批量修改文件編碼格式的方法

    這篇文章主要為大家詳細(xì)介紹了python批量修改文件編碼格式的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python中的星號*還能這么用你知道嗎

    Python中的星號*還能這么用你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Python中的星號*用法的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • python 如何調(diào)用 dubbo 接口

    python 如何調(diào)用 dubbo 接口

    這篇文章主要介紹了python 如何調(diào)用 dubbo 接口,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python集合中remove()函數(shù)的使用方法詳解

    Python集合中remove()函數(shù)的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于python集合中remove()函數(shù)的使用,以及在使用Python集合的remove方法時(shí)應(yīng)注意的事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Python根據(jù)服務(wù)獲取端口號的方法

    Python根據(jù)服務(wù)獲取端口號的方法

    這篇文章主要介紹了Python根據(jù)服務(wù)獲取端口號,文中給大家提到了linux查看端口開啟端口的方法,需要的朋友可以參考下
    2019-09-09
  • Python利器openpyxl之操作excel表格

    Python利器openpyxl之操作excel表格

    這篇文章主要給大家介紹了關(guān)于Python利器openpyxl之操作excel表格的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python調(diào)用百度語音REST API

    python調(diào)用百度語音REST API

    這篇文章主要為大家詳細(xì)介紹了python調(diào)用百度語音REST API,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論

濮阳市| 方正县| 永和县| 苏州市| 临桂县| 光泽县| 上栗县| 大英县| 遂溪县| 肥东县| 曲周县| 绥江县| 哈尔滨市| 肇庆市| 阿克| 开封市| 临汾市| 巴南区| 邯郸县| 桦甸市| 静宁县| 赣榆县| 安化县| 明溪县| 无为县| 三江| 广河县| 腾冲县| 汝南县| 南澳县| 无锡市| 根河市| 宜昌市| 安达市| 海兴县| 普兰店市| 大名县| 鄂尔多斯市| 石家庄市| 宝鸡市| 象山县|