侧边栏壁纸
  • 累计撰写 107 篇文章
  • 累计创建 2 个标签
  • 累计收到 5 条评论
标签搜索

目 录CONTENT

文章目录

Polars,一款闪电般快速的 Python 数据库利器!

小白码上飞
2024-11-25 / 0 评论 / 0 点赞 / 255 阅读 / 1,151 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-11-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

如果你玩过Pandas,那应该知道它在处理小数据集时是一把好手,但数据量一大,它的速度就像跑高速上的拖拉机,慢得让人崩溃。Polars呢?它用的是Apache Arrow内存格式,加上Rust语言写的内核,说白了,速度就是它的最大亮点!今天就聊聊怎么用Polars做些简单又酷的事儿。


数据帧是怎么回事?

Polars的核心是DataFrame,这玩意儿就跟Pandas的DataFrame差不多,但多了点“超能力”。要用Polars,你得先装它:

pip install polars

有了它,我们来看看Polars的DataFrame是啥样的。

import polars as pl

# 创建一个简单的 DataFrame
data = pl.DataFrame({
    "name": ["Alice", "Bob", "Cathy"],
    "age": [25, 30, 35],
    "city": ["New York", "Los Angeles", "Chicago"]
})

print(data)

输出看着很清爽:

shape: (3, 3)
┌───────┬─────┬─────────────┐
│ name  │ age │ city        │
├───────┼─────┼─────────────┤
│ Alice │  25 │ New York    │
│ Bob   │  30 │ Los Angeles │
│ Cathy │  35 │ Chicago     │
└───────┴─────┴─────────────┘

咋样,和Pandas的表差不多吧?


数据选择,简单粗暴

选列、选行是常规操作,Polars搞定它就是这么简单。

按列选

# 获取年龄列
print(data["age"])

输出的效果像极了Series,但速度甩Pandas几条街。

按条件选

# 找出30岁以上的人
older_than_30 = data.filter(pl.col("age") > 30)
print(older_than_30)

这个filter看着就很人性化,别说,读起来还挺像英语句子。

按位置选

# 获取第0行
print(data[0])

小细节:Polars在按行选的时候更高效,别问,问就是Rust功劳。


数据变形,真快!

Polars支持类似Pandas的变形操作,但它更适合处理大数据集,尤其是列式存储的优势一看便知。

增加新列

# 增加一个新列,表示是否成年
data = data.with_columns((pl.col("age") > 18).alias("is_adult"))
print(data)

这玩意儿用起来真的“丝滑”,没多余的锅碗瓢盆。

按列计算

# 计算年龄的平均值
mean_age = data["age"].mean()
print(f"平均年龄是:{mean_age}")

计算还自带聚合操作,效率让人想扔掉Pandas。


与Pandas无缝对接

很多人担心切换到Polars会不兼容之前的代码。别怕,Polars提供了和Pandas来回转的桥梁。

Pandas -> Polars

import pandas as pd

# 创建一个 Pandas DataFrame
pandas_df = pd.DataFrame({
    "name": ["Alice", "Bob"],
    "age": [25, 30]
})

# 转成 Polars DataFrame
polars_df = pl.from_pandas(pandas_df)
print(polars_df)

Polars -> Pandas

# 再转回 Pandas
back_to_pandas = polars_df.to_pandas()
print(back_to_pandas)

你看,Polars不光快,还挺懂事儿。


温馨提示

  1. 别搞太多循环:Polars有自己的表达式系统,尽量用内置方法搞定。循环写多了,速度优势就没了。
  2. 记得用最新版本:Polars更新特别快,偶尔会有API变化,别用老版本卡bug。
  3. Pandas不一定全弃:如果你的数据集小到装得下内存,用Pandas也挺香,别死磕速度。

聚合操作,事半功倍

说到处理分组数据,Polars比Pandas整洁很多。

# 按城市分组,计算平均年龄
grouped = data.groupby("city").agg([
    pl.col("age").mean().alias("avg_age")
])
print(grouped)

输出就很干净,代码一目了然。


写入与读取,快得一塌糊涂

Polars支持各种格式,CSV、Parquet都不在话下。

写入文件

data.write_csv("output.csv")

读取文件

# 从CSV加载
loaded_data = pl.read_csv("output.csv")
print(loaded_data)

用Parquet还能再快一丢丢,适合特别大的数据。


Polars就是这么个“狠角色”,轻快灵活,用着还贼省心。如果你的数据量大到Pandas吃不消,Polars绝对值得一试!

彩蛋时间

走过路过不要错过,为大家准备了一份pycharm破解工具,感兴趣的朋友可以看看哈:最新pycharm破解

0

评论区