过滤

过滤日期列的方式与使用该方法过滤其他类型的列的方式相同, 使用filter即可

Polars使用Python原生的datetime, datetimedelta来进行数据类型pl.Datetime,pl.Datepl.Durationi之间的相等性比较

我们依然使用上一节的数据集, 点击即可下载

parse_time_from_file.csv
1import polars as pl
2df = pl.read_csv("./parse_time_from_file.csv", try_parse_dates=True)
3print(df)
1shape: (6, 2)
2┌────────────┬────────┐
3│ Date       ┆ Close  │
4│ ---        ┆ ---    │
5│ date       ┆ f64    │
6╞════════════╪════════╡
7│ 1982-02-23 ┆ 24.62  │
8│ 1982-05-06 ┆ 27.38  │
9│ 1981-05-18 ┆ 28.0   │
10│ 1981-09-25 ┆ 14.25  │
11│ 2013-11-07 ┆ 512.49 │
12│ 2014-02-25 ┆ 522.06 │
13└────────────┴────────┘

按单个日期过滤

我们可以使用过滤表达式中的==来过滤单个日期

1from datetime import datetime
2
3filtered_df = df.filter(
4    pl.col("Date") == datetime(2014, 2, 25),
5)
6print(filtered_df)
1shape: (1, 2)
2┌────────────┬────────┐
3│ Date       ┆ Close  │
4│ ---        ┆ ---    │
5│ date       ┆ f64    │
6╞════════════╪════════╡
7│ 2014-02-25 ┆ 522.06 │
8└────────────┴────────┘

按日期范围过滤

我们可以使用is_between来进行范围过滤

1from datetime import date
2filtered_range_df = df.filter(
3	pl.col("Date").is_between(date(2010,1,1),date(2016,1,1))
4)
5
6print(filtered_range_df)
1shape: (2, 2)
2┌────────────┬────────┐
3│ Date       ┆ Close  │
4│ ---        ┆ ---    │
5│ date       ┆ f64    │
6╞════════════╪════════╡
7│ 2013-11-07 ┆ 512.49 │
8│ 2014-02-25 ┆ 522.06 │
9└────────────┴────────┘

负数日期

Polars可以很好的解析和存储负数日期, 但Python的datetime库却不行. 因此为了过滤可以使用.dt命名空间中的属性

1ts = pl.Series(["-1300-05-23", "-1400-03-02"]).str.to_date()
2negative_dates_df = pl.DataFrame({"ts": ts, "values": [3, 4]})
3
4negative_dates_filtered_df = negative_dates_df.filter(pl.col("ts").dt.year() < -1300)
5print(negative_dates_filtered_df)
1shape: (1, 2)
2┌─────────────┬────────┐
3│ ts          ┆ values │
4│ ---         ┆ ---    │
5│ date        ┆ i64    │
6╞═════════════╪════════╡
7│ -1400-03-02 ┆ 4      │
8└─────────────┴────────┘