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

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

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

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

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

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

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

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

對于初學者,你可以這樣理解 DuckDB:

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

核心優(yōu)勢:

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

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

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

安裝 DuckDB

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

pip install duckdb pandas

注:我們同時安裝了 pandas,因為 DuckDB 和 Pandas 配合使用簡直是天作之合。

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

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

場景一:Hello World —— 第一次運行 SQL

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

新建一個 Python 文件 demo_basic.py

import duckdb

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

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

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

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

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

首先,我們用 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)計每種水果的總銷售額(價格 * 數(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 辦公自動化中最強大的功能。如果你已經有一個 Pandas 的 DataFrame 變量,你可以直接用 SQL 查詢它,而不需要把數(shù)據(jù)存入數(shù)據(jù)庫。

import duckdb
import pandas as pd

# 假設這是你從 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
""")

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

為什么這很重要?

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

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

默認情況下,DuckDB 是運行在內存里的(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. 關閉連接
con.close()

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

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

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

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

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

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

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

雖然 DuckDB 很強大,但新手在使用時需要注意以下幾點:

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

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

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

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

6. 總結與資源

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

回顧一下它的核心用法:

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

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

相關文章

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

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

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

    Django中模版的子目錄與include標簽的使用方法

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

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

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

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

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

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

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

    python 如何調用 dubbo 接口

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

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

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

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

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

    Python利器openpyxl之操作excel表格

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

    python調用百度語音REST API

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

最新評論

波密县| 新昌县| 澄江县| 三门县| 尤溪县| 普洱| 贺州市| 抚顺县| 嵊泗县| 乐平市| 芜湖市| 若羌县| 白朗县| 呼和浩特市| 康定县| 靖西县| 凤山市| 蒙城县| 长阳| 长垣县| 广西| 环江| 东乡族自治县| 闽清县| 武平县| 大竹县| 碌曲县| 平安县| 福贡县| 昂仁县| 南通市| 遂平县| 岳普湖县| 镇江市| 余江县| 兴城市| 方山县| 鱼台县| 兰考县| 西乡县| 福安市|