ZetCode

Polars 日期时间操作

最后修改时间:2025年3月1日

Polars 是一个用 Rust 编写的快速 DataFrame 库,并提供了 Python 绑定。它旨在实现高效的数据处理和分析。本教程将通过实际示例介绍 Polars 中的日期时间操作。

日期时间操作对于时间序列分析、数据过滤和特征工程至关重要。Polars 为处理日期时间数据提供了强大的支持。

创建带日期时间的 DataFrame

此示例展示了如何创建一个带有日期时间列的 Polars DataFrame。

create_datetime.py
import polars as pl
from datetime import datetime

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2), datetime(2023, 1, 3)],
    "value": [10, 20, 30]
}

df = pl.DataFrame(data)
print(df)

datetime 模块用于创建日期时间对象。这些对象存储在 Polars DataFrame 中,以便进行进一步的分析。

按日期过滤

此示例演示如何根据特定日期过滤行。

filter_by_date.py
import polars as pl
from datetime import datetime

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2), datetime(2023, 1, 3)],
    "value": [10, 20, 30]
}

df = pl.DataFrame(data)
filtered_df = df.filter(pl.col("date") == datetime(2023, 1, 2))
print(filtered_df)

filter 方法用于选择日期值匹配特定值的行。这对于提取特定时间段非常有用。

提取日期组件

此示例展示了如何从日期时间列中提取年、月、日。

extract_components.py
import polars as pl
from datetime import datetime

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2), datetime(2023, 1, 3)],
    "value": [10, 20, 30]
}

df = pl.DataFrame(data)
df = df.with_columns([
    pl.col("date").dt.year().alias("year"),
    pl.col("date").dt.month().alias("month"),
    pl.col("date").dt.day().alias("day")
])
print(df)

dt.yeardt.monthdt.day 方法用于提取日期组件。这些对于分组或分析非常有用。

计算日期差

此示例演示了如何计算日期之间的差异。

date_difference.py
import polars as pl
from datetime import datetime

data = {
    "start_date": [datetime(2023, 1, 1), datetime(2023, 1, 2)],
    "end_date": [datetime(2023, 1, 3), datetime(2023, 1, 5)]
}

df = pl.DataFrame(data)
df = df.with_columns([
    (pl.col("end_date") - pl.col("start_date")).alias("date_diff")
])
print(df)

两个日期时间列之间的差异是通过减法计算的。这对于测量时间间隔非常有用。

添加时间间隔

此示例展示了如何向日期时间列添加时间间隔。

add_time_interval.py
import polars as pl
from datetime import datetime, timedelta

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2)]
}

df = pl.DataFrame(data)
df = df.with_columns([
    (pl.col("date") + timedelta(days=5)).alias("new_date")
])
print(df)

timedelta 对象用于向日期时间列添加 5 天的间隔。这对于预测或调度很有用。

按日期分组

此示例演示了如何按日期组件对数据进行分组。

group_by_date.py
import polars as pl
from datetime import datetime

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2), datetime(2023, 1, 1)],
    "value": [10, 20, 30]
}

df = pl.DataFrame(data)
grouped_df = df.groupby("date").agg(pl.col("value").sum())
print(grouped_df)

groupby 方法按日期列对行进行分组。然后可以将 sum 等聚合函数应用于每个组。

重采样时间序列数据

此示例展示了如何将时间序列数据重采样到不同的频率。

resample_data.py
import polars as pl
from datetime import datetime

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2), datetime(2023, 1, 3)],
    "value": [10, 20, 30]
}

df = pl.DataFrame(data)
resampled_df = df.set_sorted("date").groupby_dynamic("date", every="1d").agg(pl.col("value").sum())
print(resampled_df)

groupby_dynamic 方法将数据重采样为每日频率。这对于时间序列分析非常有用。

处理时区

此示例演示了如何将日期时间列转换为不同的时区。

time_zone_conversion.py
import polars as pl
from datetime import datetime
import pytz

data = {
    "date": [datetime(2023, 1, 1), datetime(2023, 1, 2)]
}

df = pl.DataFrame(data)
df = df.with_columns([
    pl.col("date").dt.convert_time_zone("UTC").alias("utc_date"),
    pl.col("date").dt.convert_time_zone("America/New_York").alias("ny_date")
])
print(df)

dt.convert_time_zone 方法将日期时间列转换为不同的时区。这对于全球数据分析非常有用。

日期时间操作的最佳实践

来源

Polars 文档

在本文中,我们探讨了 Polars 中的日期时间操作。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 Polars 教程列表。