如何按日期过滤极坐标数据框?

问题描述 投票:0回答:3
df.filter(pl.col("MyDate") >= "2020-01-01")

不像 pandas 那样工作。

我找到了解决方法

df.filter(pl.col("MyDate") >= pl.datetime(2020,1,1))

但是如果我需要使用字符串变量,这并不能解决问题。

python python-polars
3个回答
10
投票

您可以将字符串转换为日期类型,例如与

.str.to_date()

以上面的示例为基础:

import polars as pl
from datetime import datetime

df = pl.DataFrame({
    "dates": [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
    "vals": range(3)
})

df.filter(pl.col('dates') >= pl.lit(my_date_str).str.to_date())
shape: (2, 2)
┌─────────────────────┬──────┐
│ dates               ┆ vals │
│ ---                 ┆ ---  │
│ datetime[μs]        ┆ i64  │
╞═════════════════════╪══════╡
│ 2021-01-02 00:00:00 ┆ 1    │
│ 2021-01-03 00:00:00 ┆ 2    │
└─────────────────────┴──────┘

10
投票

您可以使用

python datetime
对象。它们将转换为极坐标
literal
表达式。

import polars as pl
from datetime import datetime

pl.DataFrame({
    "dates": [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
    "vals": range(3)
}).filter(pl.col("dates") > datetime(2021, 1, 2))

或者用显式语法:

pl.col("dates") > pl.lit(datetime(2021, 1, 2))


0
投票

稍微简洁的代码的黑客解决方法:只需使用 pandas!

pd.to_datetime
采用单个字符串,并且通过使用我自己的数据以及您的示例 Polars 进行测试,非常高兴能够使用它返回的 pandas 日期时间对象。

如果从 pandas 导入对你来说是不可能的,那么这是没有用的,但如果你想要简单的字符串到日期转换...... 为什么不使用 pandas 来做它擅长的事情呢? :P

import polars as pl
from datetime import datetime
from pandas import to_datetime # or just import pandas as pd

df = pl.DataFrame({
    "dates": [datetime(2021, 1, 1), datetime(2021, 1, 2), datetime(2021, 1, 3)],
    "vals": range(3)
})

my_date_str = "2021-01-02"
my_date = to_datetime(my_date_str) # or use pd.to_datetime
print(df.filter(pl.col('dates') >= my_date))

产生:

shape: (2, 2)
┌─────────────────────┬──────┐
│ dates               ┆ vals │
│ ---                 ┆ ---  │
│ datetime[μs]        ┆ i64  │
╞═════════════════════╪══════╡
│ 2021-01-02 00:00:00 ┆ 1    │
│ 2021-01-03 00:00:00 ┆ 2    │
└─────────────────────┴──────┘
© www.soinside.com 2019 - 2024. All rights reserved.