过滤
过滤日期列的方式与使用该方法过滤其他类型的列的方式相同, 使用filter
即可
Polars使用Python原生的datetime
, date
和timedelta
来进行数据类型pl.Datetime
,pl.Date
和pl.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└─────────────┴────────┘