在 Polars 中选择日期时间列

问题描述 投票:0回答:2

在 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”

python-polars
2个回答
1
投票

您可以像使用

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 │
└─────────────────────┴─────────────────────┘


1
投票

Polars 0.18.1 开始,您可以使用

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 │
└─────────────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.