Polars 日期时间操作
最后修改时间:2025年3月1日
Polars 是一个用 Rust 编写的快速 DataFrame 库,并提供了 Python 绑定。它旨在实现高效的数据处理和分析。本教程将通过实际示例介绍 Polars 中的日期时间操作。
日期时间操作对于时间序列分析、数据过滤和特征工程至关重要。Polars 为处理日期时间数据提供了强大的支持。
创建带日期时间的 DataFrame
此示例展示了如何创建一个带有日期时间列的 Polars DataFrame。
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 中,以便进行进一步的分析。
按日期过滤
此示例演示如何根据特定日期过滤行。
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
方法用于选择日期值匹配特定值的行。这对于提取特定时间段非常有用。
提取日期组件
此示例展示了如何从日期时间列中提取年、月、日。
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.year
、dt.month
和 dt.day
方法用于提取日期组件。这些对于分组或分析非常有用。
计算日期差
此示例演示了如何计算日期之间的差异。
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)
两个日期时间列之间的差异是通过减法计算的。这对于测量时间间隔非常有用。
添加时间间隔
此示例展示了如何向日期时间列添加时间间隔。
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 天的间隔。这对于预测或调度很有用。
按日期分组
此示例演示了如何按日期组件对数据进行分组。
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
等聚合函数应用于每个组。
重采样时间序列数据
此示例展示了如何将时间序列数据重采样到不同的频率。
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
方法将数据重采样为每日频率。这对于时间序列分析非常有用。
处理时区
此示例演示了如何将日期时间列转换为不同的时区。
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 中的日期时间操作。
作者
所有 Polars 教程列表。