8個Python中批量處理數(shù)據(jù)的核心庫使用指南
處理數(shù)據(jù)的時(shí)候,我發(fā)現(xiàn) Excel 有時(shí)候不好用,不是說它的功能不好用,而是它的隱形轉(zhuǎn)換和不可復(fù)現(xiàn)輸在起跑線上了。日期格式錯亂、大文件卡死、邏輯難以追蹤,這些問題在工程化項(xiàng)目中是致命的。
所以,我整理了一套 Python 工具棧。它們不搞花哨的噱頭,只解決具體的問題。
DuckDB:輕松搞定億級數(shù)據(jù)
如果在單機(jī)上處理幾百兆到幾 GB 的數(shù)據(jù),Pandas 的內(nèi)存占用簡直讓我抓狂。DuckDB 的出現(xiàn)填補(bǔ)了 SQLite 和分布式數(shù)據(jù)庫之間的空白。它是一個進(jìn)程內(nèi)的 OLAP 數(shù)據(jù)庫,最大的特點(diǎn)是零配置和向量化計(jì)算。
DuckDB 可以直接對 CSV、Parquet 或 JSON 文件執(zhí)行 SQL 查詢,無需將數(shù)據(jù)全部加載到內(nèi)存。
import duckdb
# 直接對 Parquet 文件執(zhí)行 SQL,無需建庫建表
# 這里的 query 類似于 Pandas 的 dataframe,但計(jì)算是在 DuckDB 引擎中完成的
result = duckdb.sql("""
SELECT
department,
AVG(salary) as avg_salary
FROM 'employees.parquet'
WHERE join_date > '2022-01-01'
GROUP BY department
ORDER BY avg_salary DESC
""").df()
print(result)
Ibis:寫一次代碼,到處運(yùn)行
Ibis 和 DuckDB 是目前數(shù)據(jù)工程領(lǐng)域的黃金搭檔。
Ibis 將業(yè)務(wù)邏輯與執(zhí)行引擎分離,這也是它的核心??梢允褂妙愃?Pandas 的 Python API 來編寫查詢邏輯,后端可以無縫切換為 DuckDB、ClickHouse、BigQuery 甚至是 PySpark。
使用 Ibis 驅(qū)動 DuckDB 時(shí),既享受了 Python 代碼的優(yōu)雅和類型檢查,又利用了 DuckDB 極速的執(zhí)行引擎。一舉兩得,棒棒噠。
import ibis
# 連接到 DuckDB 后端(也可以是 SQLite, Postgres 等)
con = ibis.duckdb.connect()
# 惰性讀取數(shù)據(jù),此時(shí)并未真正加載
table = con.read_csv("sales_data.csv")
# 構(gòu)建查詢表達(dá)式
expr = (
table.filter(table["status"] == "completed")
.group_by("region")
.aggregate(total_revenue=table["amount"].sum())
.order_by(ibis.desc("total_revenue"))
)
# 只有調(diào)用 execute() 時(shí)才會生成 SQL 并執(zhí)行
print(expr.execute())
Polars:多線程時(shí)代的 DataFrame
Pandas 是單線程的,而 Polars 是用 Rust 編寫的,天生支持并行計(jì)算。在處理大規(guī)模數(shù)據(jù)集時(shí),Polars 的速度通常比 Pandas 快數(shù)倍。
它的設(shè)計(jì)理念采用了“惰性求值”(Lazy Evaluation),先構(gòu)建查詢計(jì)劃,經(jīng)優(yōu)化器優(yōu)化后再執(zhí)行,這能極大減少內(nèi)存開銷。
import polars as pl
# 掃描文件而非讀取,啟用 Lazy 模式
q = (
pl.scan_csv("large_dataset.csv")
.filter(pl.col("age") > 30)
.select(["name", "salary", "department"])
.group_by("department")
.agg(pl.col("salary").mean().alias("avg_salary"))
)
# collect() 觸發(fā)實(shí)際計(jì)算
df = q.collect()
print(df)
PyArrow Compute:底層的計(jì)算基石
PyArrow 不僅僅是數(shù)據(jù)格式標(biāo)準(zhǔn),其 compute 模塊提供了一套高性能的向量化計(jì)算函數(shù)。很多現(xiàn)代數(shù)據(jù)工具(包括 Pandas 2.0+)底層都在使用它。
如果需要對數(shù)組進(jìn)行極速的數(shù)學(xué)運(yùn)算或字符串處理,且不想引入 DataFrame 的額外開銷,可以考慮一下 PyArrow Compute。
import pyarrow as pa import pyarrow.compute as pc # 創(chuàng)建 Arrow 數(shù)組 arr_a = pa.array([10, 20, 30, 40, None]) arr_b = pa.array([2, 4, 5, 8, 1]) # 使用計(jì)算內(nèi)核進(jìn)行向量化乘法,自動處理 None 值 result = pc.multiply(arr_a, arr_b) # 過濾數(shù)據(jù) mask = pc.greater(result, 50) filtered = pc.filter(result, mask) print(filtered)
TinyDB:面向文檔的輕量級存儲
并非所有項(xiàng)目都需要 PostgreSQL。對于配置文件管理、小型爬蟲數(shù)據(jù)存儲或單機(jī)小工具,TinyDB 非常合適。它是一個純 Python 編寫的文檔型數(shù)據(jù)庫,數(shù)據(jù)存儲在 JSON 文件中,API 像操作 Python 列表一樣自然。
from tinydb import TinyDB, Query
db = TinyDB('local_storage.json')
User = Query()
# 插入數(shù)據(jù)
db.insert({'name': 'Alice', 'role': 'admin', 'points': 85})
db.insert({'name': 'Bob', 'role': 'user', 'points': 60})
# 查詢數(shù)據(jù)
results = db.search(User.role == 'admin')
print(results)
Rill:開發(fā)者的 BI 工具

雖然 Rill 更像是一個工具而非傳統(tǒng)的 Python 庫,但它在現(xiàn)代 Python 數(shù)據(jù)棧中地位獨(dú)特。Rill 基于 DuckDB,能夠快速讀取本地?cái)?shù)據(jù)(CSV, Parquet),并瞬間生成交互式的 BI 儀表盤。它解決了“為了看個圖表還要搭一套 Superset”的痛點(diǎn),非常適合快速探索數(shù)據(jù)分布。
Numba:讓 Python 跑出 C 的速度
當(dāng)代碼中包含大量原生 for 循環(huán)(如科學(xué)計(jì)算、復(fù)雜算法)時(shí),Python 的解釋器性能往往成為瓶頸。Numba 是一個 JIT(即時(shí))編譯器,通過加一行裝飾器,就能將 Python 函數(shù)編譯成機(jī)器碼運(yùn)行。
from numba import jit
import time
# 不使用 @jit 時(shí),Python 循環(huán)較慢
# 使用 nopython=True 強(qiáng)制生成機(jī)器碼
@jit(nopython=True)
def heavy_computation(n):
total = 0
for i in range(n):
total += i * 2
return total
start = time.time()
print(heavy_computation(100_000_000))
print(f"耗時(shí): {time.time() - start:.4f} 秒")
Bonobo:輕量級 ETL 框架
對于不需要 Airflow 這種重型調(diào)度系統(tǒng)的數(shù)據(jù)遷移任務(wù),Bonobo 提供了一種基于圖(Graph)的輕量級 ETL 方案。它使用純 Python 代碼定義數(shù)據(jù)流向,邏輯清晰,非常適合處理中小規(guī)模的數(shù)據(jù)清洗和轉(zhuǎn)換任務(wù)。
import bonobo
def extract():
yield {'id': 1, 'name': ' Item A '}
yield {'id': 2, 'name': ' Item B '}
def transform(row):
return {
'id': row['id'],
'name_clean': row['name'].strip().upper()
}
def load(row):
print(f"Loading: {row}")
def get_graph(**options):
graph = bonobo.Graph()
graph.add_chain(extract, transform, load)
return graph
if __name__ == '__main__':
# 實(shí)際運(yùn)行時(shí)使用 bonobo run
parser = bonobo.get_argument_parser()
with bonobo.parse_args(parser) as options:
bonobo.run(get_graph(**options))
上述庫涵蓋了從數(shù)據(jù)存儲、計(jì)算引擎到 ETL 流程的各個環(huán)節(jié),Python的庫,需要的肯定是 Python 環(huán)境。
而且碼農(nóng)怎么可能只有一個項(xiàng)目需要維護(hù)呢?肯定是有的依賴最新的 Python 3.14,有的則必須跑在 Python 3.8 甚至古老的 Python 2.7 上維護(hù)遺留系統(tǒng)。系統(tǒng)自帶的 Python 環(huán)境一旦弄亂,修復(fù)起來就頭大了。
那這時(shí)候我們就要請上 ServBay 了。
ServBay 為開發(fā)者提供了一個隔離且純凈的開發(fā)環(huán)境。它最大的優(yōu)勢是一鍵部署和多版本共存。

- 極速安裝:還在用命令行就out了。ServBay 點(diǎn)擊即可安裝好包含常用組件的開發(fā)環(huán)境。
- 全版本支持:它支持從最新的 Python 3.x 到早期的 Python 2.x 版本。
- 環(huán)境隔離:ServBay 的環(huán)境獨(dú)立于系統(tǒng),不會污染系統(tǒng)自帶的 Python,保證了系統(tǒng)的穩(wěn)定性。
對于追求效率的開發(fā)者而言,將環(huán)境管理交給 ServBay,把精力集中在代碼和數(shù)據(jù)邏輯上,才是更明智的選擇。
數(shù)據(jù)處理的邊界正在被這些新興的工具不斷拓展。對于開發(fā)者而言,保持對新技術(shù)的敏感度,同時(shí)擁有一個隨時(shí)能推倒重來且互不干擾的好工具,也是提高效率的關(guān)鍵。
到此這篇關(guān)于8個Python中批量處理數(shù)據(jù)的核心庫使用指南的文章就介紹到這了,更多相關(guān)Python處理數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Tensorflow中TFRecord生成與讀取的實(shí)現(xiàn)
TFRecord格式的文件存儲形式會很合理的幫我們存儲數(shù)據(jù),本文主要介紹了Tensorflow中TFRecord生成與讀取的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
如何用Python Beautiful?Soup解析HTML內(nèi)容
Beautiful Soup是一種Python的解析庫,主要用于解析和處理HTML/XML內(nèi)容,詳細(xì)介紹Beautiful Soup的使用方式和應(yīng)用場景,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python函數(shù)元數(shù)據(jù)實(shí)現(xiàn)為一個參數(shù)指定多個類型
這篇文章主要介紹了Python函數(shù)元數(shù)據(jù)實(shí)現(xiàn)為一個參數(shù)指定多個類型方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
Keras模型轉(zhuǎn)成tensorflow的.pb操作
這篇文章主要介紹了Keras模型轉(zhuǎn)成tensorflow的.pb操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python的ping網(wǎng)絡(luò)狀態(tài)監(jiān)測的實(shí)現(xiàn)(含多IP)
本文主要介紹了python的ping網(wǎng)絡(luò)狀態(tài)監(jiān)測的實(shí)現(xiàn)(含多IP),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

