如何在 Polars 中将时间持续时间转换为数字?

8

polars 中是否有任何内置函数或更好的方法,可以通过定义时间分辨率(例如:天、小时、分钟)将时间持续时间转换为数字?

# Create a dataframe
df = pl.DataFrame(
    {
        "from": ["2023-01-01", "2023-01-02", "2023-01-03"],
        "to": ["2023-01-04", "2023-01-05", "2023-01-06"],
    }
)


# Convert to date and calculate the time difference
df = df.with_columns(
    [
        pl.col("from").str.strptime(pl.Date, "%Y-%m-%d").alias("from_date"),
        pl.col("to").str.strptime(pl.Date, "%Y-%m-%d").alias("to_date"),
    ]
).with_columns((pl.col("to_date") - pl.col("from_date")).alias("time_diff"))

# Convert the time difference to int (in days)
df = df.with_columns(
    ((pl.col("time_diff") / (24 * 60 * 60 * 1000)).cast(pl.Int8)).alias("time_diff_int")
)

df

1个回答

4

dt访问器可以让您获取单个组件,这是您要寻找的吗?

df["time_diff"].dt.days()
Series: 'time_diff' [i64]
[
    3
    3
    3
]

df["time_diff"].dt.hours()
Series: 'time_diff' [i64]
[
    72
    72
    72
]

df["time_diff"].dt.minutes()
Series: 'time_diff' [i64]
[
    4320
    4320
    4320
]

文档:API 参考, series/timeseries


除了明显的查看赞成和反对的总数之外,是否有可能获取年份?dt访问器使您能够获取单个组件,这就是您要找的吗?df ["time_diff"] .dt.days()/ 365 - Björn
1
@Björn,我不完全理解你的评论;你是在问如何获取年份还是在建议解决方法?总的来说,请注意,“年”是一个不明确的时间段;并不是所有的年份都有365天。 - FObersteiner
前者,我想知道如果我减去两个日期对象,并希望获得以年为单位的pl.Duration结果,最好的方法是什么。我猜在大多数情况下,使用/365的粗略估计已经足够了。因为你绝对正确,年份是有歧义的(如果你想要极高的精度)。 - Björn
1
是的,从月份开始就变得模糊了,所以任何低于这个级别的内容都应该由持续时间类型来处理。对于高于此级别的内容,据我所知,你需要自己解决。365或365.25天在大多数情况下都可以获得小数年份。 - FObersteiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接