如果你玩过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不光快,还挺懂事儿。
温馨提示
- 别搞太多循环:Polars有自己的表达式系统,尽量用内置方法搞定。循环写多了,速度优势就没了。
- 记得用最新版本:Polars更新特别快,偶尔会有API变化,别用老版本卡bug。
- 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破解
评论区