在 Polars 中,我们可以按类型选择列 - 参见例如如何在 Polars 中按数据类型选择列?
但是,我不知道如何选择
datetime
列。从 Polars 的教程中我们有这个例子:
import polars as pl
import datetime at dt
df_trades = pl.DataFrame(
{
"time": [
dt.datetime(2020, 1, 1, 9, 1, 0),
dt.datetime(2020, 1, 1, 9, 1, 0),
dt.datetime(2020, 1, 1, 9, 3, 0),
dt.datetime(2020, 1, 1, 9, 6, 0),
],
"stock": ["A", "B", "B", "C"],
"trade": [101, 299, 301, 500],
}
)
列类型打印如下:
┌─────────────────────┬───────┬───────┐
│ time ┆ stock ┆ trade │
│ --- ┆ --- ┆ --- │
│ datetime[μs] ┆ str ┆ i64 │
对于
stock
列,我们可以使用
df_trades.select(pl.col(pl.String))
但是
time
列的类型是什么?使用 dt.datetime
代替 pl.String
会产生错误:
类型错误:参数“名称”:“类型”对象无法转换为“PyString”
您可以像使用
pl.String
一样按数据类型选择极坐标列,但您必须传递 polars
数据类型才能使其工作,而不是 python datetime.datetime
值/对象。
下面我们通过传递
"us"
数据类型来选择具有 pl.Datetime("us")
分辨率的所有日期时间数据类型。
import polars as pl
from datetime import datetime
df_trades = pl.DataFrame(
{
"time1": [
datetime(2020, 1, 1, 9, 1, 0),
datetime(2020, 1, 1, 9, 1, 0),
datetime(2020, 1, 1, 9, 3, 0),
datetime(2020, 1, 1, 9, 6, 0),
],
"time2": [
datetime(2020, 1, 1, 9, 1, 0),
datetime(2020, 1, 1, 9, 1, 0),
datetime(2020, 1, 1, 9, 3, 0),
datetime(2020, 1, 1, 9, 6, 0),
],
"stock": ["A", "B", "B", "C"],
"trade": [101, 299, 301, 500],
}
)
df_trades.select(
pl.col(pl.Datetime("us"))
)
shape: (4, 2)
┌─────────────────────┬─────────────────────┐
│ time1 ┆ time2 │
│ --- ┆ --- │
│ datetime[μs] ┆ datetime[μs] │
╞═════════════════════╪═════════════════════╡
│ 2020-01-01 09:01:00 ┆ 2020-01-01 09:01:00 │
│ 2020-01-01 09:01:00 ┆ 2020-01-01 09:01:00 │
│ 2020-01-01 09:03:00 ┆ 2020-01-01 09:03:00 │
│ 2020-01-01 09:06:00 ┆ 2020-01-01 09:06:00 │
└─────────────────────┴─────────────────────┘
polars.selectors.datetime
选择器仅选择日期时间列。
>>> import polars as pl
>>> import polars.selectors as cs
>>> import datetime as dt
>>>
>>> df_trades = pl.DataFrame(
... {
... "time": [
... dt.datetime(2020, 1, 1, 9, 1, 0),
... dt.datetime(2020, 1, 1, 9, 1, 0),
... dt.datetime(2020, 1, 1, 9, 3, 0),
... dt.datetime(2020, 1, 1, 9, 6, 0),
... ],
... "stock": ["A", "B", "B", "C"],
... "trade": [101, 299, 301, 500],
... }
... )
>>>
>>> print(df_trades.select(cs.datetime()))
shape: (4, 1)
┌─────────────────────┐
│ time │
│ --- │
│ datetime[μs] │
╞═════════════════════╡
│ 2020-01-01 09:01:00 │
│ 2020-01-01 09:01:00 │
│ 2020-01-01 09:03:00 │
│ 2020-01-01 09:06:00 │
└─────────────────────┘