【发布时间】:2023-01-24 11:10:22
【问题描述】:
df.filter(pl.col("MyDate") >= "2020-01-01")
不像在熊猫中那样工作。
我找到了解决方法
df.filter(pl.col("MyDate") >= pl.datetime(2020,1,1))
但是如果我需要使用字符串变量,这并不能解决问题。
【问题讨论】:
标签: python python-polars
df.filter(pl.col("MyDate") >= "2020-01-01")
不像在熊猫中那样工作。
我找到了解决方法
df.filter(pl.col("MyDate") >= pl.datetime(2020,1,1))
但是如果我需要使用字符串变量,这并不能解决问题。
【问题讨论】:
标签: python python-polars
您可以使用 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))
【讨论】:
使用pl.lit(my_date_str).str.strptime(pl.Date, fmt=my_date_fmt))
基于上面的示例:
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)
})
my_date_str="2021-01-02"
my_date_fmt="%F"
df.filter(pl.col('dates') >= pl.lit(my_date_str).str.strptime(pl.Date, fmt=my_date_fmt))
shape: (2, 2)
┌─────────────────────┬──────┐
│ dates ┆ vals │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞═════════════════════╪══════╡
│ 2021-01-02 00:00:00 ┆ 1 │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2021-01-03 00:00:00 ┆ 2 │
└─────────────────────┴──────┘
请确保将格式与您的日期字符串相匹配。例如,
my_date_str="01/02/21"
my_date_fmt="%D"
我无法谈论这种方法的性能,但它提供了一种将字符串变量合并到代码中的简单方法。
【讨论】:
稍微整洁的代码的 Hacky 解决方法:只需使用 pandas!
pd.to_datetime 采用单个字符串,通过使用我自己的数据以及您的示例进行测试,polars 非常乐意使用它返回的 pandas datetime 对象。
如果从 pandas 导入对你来说是不可能的,那么这是没用的,但如果你想要简单的字符串到日期转换...... why not use pandas for what it's good at? :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 │
└─────────────────────┴──────┘
【讨论】: