目 录CONTENT

文章目录

5 值得尝试的轻量级 Pandas 替代品

Administrator
2025-12-13 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://www.kdnuggets.com/5-lightweight-alternatives-to-pandas-you-should-try

原文作者:Kanwal Mehreen


5 Lightweight Alternatives to Pandas You Should Try
Image by Author

 

# 引言

 
开发者通常使用 pandas 进行数据操作,但它在处理大型数据集时可能会很慢。正因如此,许多人正在寻找更快、更轻量的替代方案。这些替代方案保留了分析所需的核心功能,同时侧重于速度、更低的内存使用率和简洁性。在本文中,我们将探讨你可以尝试的五种轻量级 pandas 替代品。


# 1. DuckDB

 
DuckDB 相当于分析领域的 SQLite。你可以直接对逗号分隔值(CSV)文件运行 SQL 查询。如果你熟悉 SQL 或在机器学习管道中工作,它会非常有用。使用以下命令安装:

pip install duckdb

 

我们将使用泰坦尼克号(Titanic)数据集并对其运行一个简单的 SQL 查询,如下所示:

import duckdb
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv"
# 在 CSV 上运行 SQL 查询
result = duckdb.query(f""" SELECT sex, age, survived FROM read_csv_auto('{url}') WHERE age > 18 """).to_df()
print(result.head())

 

输出:

 sex age survived 0 male 22.0 0 1 female 38.0 1 2 female 26.0 1 3 female 35.0 1 4 male 35.0 0

 

DuckDB 直接在 CSV 文件上运行 SQL 查询,然后将输出转换为 DataFrame。你可以在获得 Python 灵活性的同时享受 SQL 的速度。


# 2. Polars

 
Polars 是当今最流行的数据库之一。它使用 Rust 语言实现,速度极快且内存占用极少。其语法也非常简洁。我们使用 pip 来安装它:

pip install polars

 

现在,让我们使用泰坦尼克号数据集来看一个简单的例子:

import polars as pl
# 加载数据集
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv"
df = pl.read_csv(url)
result = df.filter(pl.col("age") > 40).select(["sex", "age", "survived"])
print(result)

 

输出:

 shape: (150, 3)
┌────────┬──────┬──────────┐
│ sex    ┆ age  ┆ survived │
│ ---    ┆ ---  ┆ ---      │
│ str    ┆ f64  ┆ i64      │
╞════════╪══════╪══════════╡
│ male   ┆ 54.0 ┆ 0        │
│ female ┆ 58.0 ┆ 1        │
│ female ┆ 55.0 ┆ 1        │
│ male   ┆ 66.0 ┆ 0        │
│ male   ┆ 42.0 ┆ 0        │
│ …      ┆ …    ┆ …        │
│ female ┆ 48.0 ┆ 1        │
│ female ┆ 42.0 ┆ 1        │
│ female ┆ 47.0 ┆ 1        │
│ male   ┆ 47.0 ┆ 0        │
│ female ┆ 56.0 ┆ 1        │
└────────┴──────┴──────────┘

 

Polars 读取 CSV 文件,根据年龄条件过滤行,并选择一部分列。


# 3. PyArrow

 
PyArrow 是一个用于列式数据的轻量级库。像 Polars 这样的工具使用 Apache Arrow 来提高速度和内存效率。它不能完全替代 pandas,但在读取文件和预处理方面表现出色。使用以下命令安装:

pip install pyarrow

 

在我们的示例中,让我们使用 Iris(鸢尾花)数据集的 CSV 格式,如下所示:

import pyarrow.csv as csv
import pyarrow.compute as pc
import urllib.request

# 下载 Iris CSV
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv"
local_file = "iris.csv"
urllib.request.urlretrieve(url, local_file)

# 使用 PyArrow 读取
table = csv.read_csv(local_file)

# 过滤行
filtered = table.filter(pc.greater(table['sepal_length'], 5.0))
print(filtered.slice(0, 5))

 

输出:

 pyarrow.Table
 sepal_length: double
 sepal_width: double
 petal_length: double
 petal_width: double
 species: string
 ----
 sepal_length: [[5.1,5.4,5.4,5.8,5.7]]
 sepal_width: [[3.5,3.9,3.7,4,4.4]]
 petal_length: [[1.4,1.7,1.5,1.2,1.5]]
 petal_width: [[0.2,0.4,0.2,0.2,0.4]]
 species: [["setosa","setosa","setosa","setosa","setosa"]]

 

PyArrow 读取 CSV 文件并将其转换为列式格式。每列的名称和类型都以清晰的架构列出。这种设置使得快速检查和过滤大型数据集变得非常容易。


# 4. Modin

 
Modin 适合那些希望获得更快性能而无需学习新库的人。它使用与 pandas 相同的 API,但以并行方式执行操作。您无需更改现有代码;只需更新导入即可。其他一切都像正常的 pandas 一样工作。使用 pip 安装:

pip install modin[ray]

 

为了更好地理解,让我们使用与前面相同的泰坦尼克号数据集进行一个小示例,如下所示:

import modin.pandas as pd
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/titanic.csv"
# 加载数据集
df = pd.read_csv(url)
# 过滤数据集
adults = df[df["age"] > 18]
# 仅选择几列进行显示
adults_small = adults[["survived", "sex", "age", "class"]]
# 显示结果
adults_small.head()

 

输出:

 survived sex age class 0 0 male 22.0 Third 1 1 female 38.0 First 2 1 female 26.0 Third 3 1 female 35.0 First 4 0 male 35.0 Third

 

Modin 将工作分散到 CPU 核心上,这意味着您无需进行任何额外操作即可获得更好的性能。


# 5. Dask

 
如何在不增加 RAM 的情况下处理大数据?当您处理的文件大小超过计算机的随机存取内存(RAM)时,Dask 是一个绝佳的选择。它使用惰性计算,因此它不会将整个数据集加载到内存中。这有助于您流畅地处理数百万行数据。使用以下命令安装:

pip install dask[complete]

 

为了尝试一下,我们可以使用芝加哥犯罪数据集,如下所示:

import dask.dataframe as dd
import urllib.request
url = "https://data.cityofchicago.org/api/views/ijzp-q8t2/rows.csv?accessType=DOWNLOAD"
local_file = "chicago_crime.csv"
urllib.request.urlretrieve(url, local_file)

# 使用 Dask 读取 CSV(惰性计算)
df = dd.read_csv(local_file, dtype=str) # 所有列都作为字符串

# 过滤分类为 'THEFT' 的犯罪
thefts = df[df['Primary Type'] == 'THEFT']

# 选择几列相关列
thefts_small = thefts[["ID", "Date", "Primary Type", "Description", "District"]]
print(thefts_small.head())

 

输出:

 ID Date Primary Type Description District 5 13204489 09/06/2023 11:00:00 AM THEFT OVER $500 001 50 13179181 08/17/2023 03:15:00 PM THEFT RETAIL THEFT 014 51 13179344 08/17/2023 07:25:00 PM THEFT RETAIL THEFT 014 53 13181885 08/20/2023 06:00:00 AM THEFT $500 AND UNDER 025 56 13184491 08/22/2023 11:44:00 AM THEFT RETAIL THEFT 014

 

过滤(Primary Type == 'THEFT')和选择列都是惰性操作。过滤会立即发生,因为 Dask 是分块处理数据而不是一次性加载所有数据。


# 结论

 
我们介绍了五种 pandas 的替代方案以及如何使用它们。本文保持了简洁和专注。有关每个库的完整详细信息,请查阅其官方文档:

如果您遇到任何问题,请发表评论,我将提供帮助。
 
 

Kanwal Mehreen 是一位机器学习工程师和技术作家,对数据科学以及人工智能与医学的交叉领域怀有深厚的兴趣。她是电子书《利用 ChatGPT 提高生产力》的合著者。作为 2022 年亚太地区谷歌一代学者,她倡导多样性和学术卓越。她还被认定为 Teradata 技术多样性学者、Mitacs Globalink 研究学者和哈佛 WeCode 学者。Kanwal 是变革的热心倡导者,她创立了 FEMCodes 来赋能 STEM 领域的女性。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区