说明
《Python Polars》 教程正在筹划更新中,敬请期待!Polars 是一个高性能的数据处理库,特别适用于大数据集和需要并行计算的场景。如果你在处理大数据时遇到性能瓶颈,可以考虑尝试 Polars,它的延迟计算和并行化机制可以显著提升处理效率。
Polars
的 DataFrame
是该库的核心数据结构之一,用于存储表格型数据。它与 Pandas 中的 DataFrame
类似,但具有更多的性能优化,特别是在处理大规模数据时,能够有效利用多核并行和内存优化。
DataFrame 是一个包含多个列的数据结构,每列可以包含不同类型的数据。每列的数据类型(如整数、浮动、字符串等)可以不同,但所有数据类型会通过 DataFrame 中的 Series
进行管理。每个 Series
就是 DataFrame 中的一列,它们共享相同的长度。
DataFrame 和 Series
的关系:
Series
(即列)。Series
表示一列数据,所有列在 DataFrame 中共享相同的行数。DataFrame 的结构:
Series
,每个 Series
的数据可以有不同的类型。Polars
默认不使用显式的行索引,数据是按顺序存储的。因此,DataFrame 的每一行通过位置来标识。Polars
提供了多种方式来创建 DataFrame,最常用的方法是通过字典或列表。如下所示:
import polars as pl
data = {
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"score": [85.5, 90.3, 92.1]
}
df = pl.DataFrame(data)
print(df)
输出:
shape: (3, 3)
┌─────────┬─────┬──────┐
│ name ┆ age │ score│
│ --- ┆ --- │ --- │
│ str ┆ i64 │ f64 │
╞═════════╪═════╪══════╡
│ Alice ┆ 25 │ 85.5 │
│ Bob ┆ 30 │ 90.3 │
│ Charlie ┆ 35 │ 92.1 │
└─────────┴─────┴──────┘
df = pl.DataFrame({
"name": pl.Series(["Alice", "Bob", "Charlie"]),
"age": pl.Series([25, 30, 35]),
"score": pl.Series([85.5, 90.3, 92.1])
})
df = pl.read_csv("data.csv")
df = pl.read_json("data.json")
使用 DataFrame 时,你可以通过列名直接选择列,或者选择多个列:
# 选择单列
age_column = df["age"]
# 选择多列
df_subset = df[["name", "score"]]
Polars
支持基于条件筛选数据,语法类似于 SQL 查询:
# 过滤出年龄大于30的行
filtered_df = df.filter(pl.col("age") > 30)
可以对单列进行操作,进行数学运算或其他转换:
# 创建一个新列,存储 age 列加上 10
df = df.with_columns((pl.col("age") + 10).alias("age_plus_10"))
与 pandas 中的 groupby
类似,Polars
也可以对数据进行分组和聚合操作:
# 按照 name 列分组,计算 age 和 score 的均值
df_grouped = df.group_by("name").agg([
pl.col("age").mean().alias("mean_age"),
pl.col("score").mean().alias("mean_score")
])
可以按某列的值对 DataFrame 进行升序或降序排序:
# 按照 age 列升序排序
df_sorted = df.sort("age", descending=True)
Polars
中的 DataFrame 使用的是丰富的类型系统。DataFrame 中的每一列都属于某种数据类型,Polars
支持以下类型:
Int8
, Int16
, Int32
, Int64
, UInt8
, UInt16
, UInt32
, UInt64
Float32
, Float64
Boolean
Utf8
Date
, Datetime
, Time
Categorical
类型转换示例:
你可以将列的类型转换为其他类型,例如将整数列转换为浮点数:
df = df.with_columns(pl.col("age").cast(pl.Float64))
Polars
提供了一个延迟计算模式(Lazy API),它允许你在实际计算之前构建查询计划并进行优化。这种模式对于大数据集尤其有效,可以减少内存占用并提高计算效率。使用 LazyFrame
,你可以对 DataFrame 执行惰性操作:
df_lazy = df.lazy()
# 构建查询计划(没有实际计算)
df_filtered = df_lazy.filter(pl.col("age") > 30).collect()
Polars
的内存管理非常高效,适用于处理非常大的数据集。Polars
支持自动的多核并行计算,使得在多核机器上运行时,性能会显著提升。Polars
的 DataFrame
是一个高效的数据结构,适用于大数据的处理。它提供了类似 Pandas 的 API,但在性能上有显著提升,特别是在多核并行处理和内存管理方面。通过延迟计算,Polars
还能够进一步优化查询效率。如果你处理的数据集较大或需要处理高性能的计算,Polars
是一个值得考虑的库。
更新时间:2024-12-30 10:38:41 标签:polars python dataframe