Polars:按datetime类型批量生成带后缀的新列方法
Polars批量为Datetime列生成带后缀的年份新列(保留原列)
要实现对任意数量的datetime列批量生成带指定后缀的年份列,同时保留原列,可以利用Polars的动态列选择和别名函数来搞定,不用手动处理每一列。
核心实现思路
用pl.col(pl.DATETIME_DTYPES)选中所有datetime/date类型的列,通过.year()提取年份,再用动态别名函数给新列加上指定后缀(比如_year),最后用with_columns或select把新列追加到原DataFrame中,原列完全保留。
代码示例
import polars as pl # 构造测试数据(模拟已完成字符串转datetime的情况) df = pl.DataFrame({ "order_date": ["2023-01-15", "2024-05-20"], "signup_date": ["2022-09-01", "2021-11-30"] }).with_columns( pl.col(["order_date", "signup_date"]).str.to_date() ) # 批量生成带_year后缀的年份列,保留原列 df = df.with_columns( pl.col(pl.DATETIME_DTYPES).year().alias(lambda col_name: f"{col_name}_year") ) print(df)
运行后输出:
shape: (2, 4) ┌────────────┬─────────────┬─────────────────┬──────────────────┐ │ order_date ┆ signup_date ┆ order_date_year ┆ signup_date_year │ │ --- ┆ --- ┆ --- ┆ --- │ │ date ┆ date ┆ i32 ┆ i32 │ ╞════════════╪═════════════╪═════════════════╪══════════════════╡ │ 2023-01-15 ┆ 2022-09-01 ┆ 2023 ┆ 2022 │ │ 2024-05-20 ┆ 2021-11-30 ┆ 2024 ┆ 2021 │ └────────────┴─────────────┴─────────────────┴──────────────────┘
自定义后缀
如果需要换成其他后缀(比如_yr),只需要修改别名函数里的拼接逻辑:
df = df.with_columns( pl.col(pl.DATETIME_DTYPES).year().alias(lambda col_name: f"{col_name}_yr") )
另一种方式:用select保留原列
你也可以用select实现,记得加上pl.all()来保留所有原列:
df = df.select( pl.all(), pl.col(pl.DATETIME_DTYPES).year().alias(lambda c: f"{c}_year") )
两种方式效果完全一致,选你顺手的就行。
内容的提问来源于stack exchange,提问作者OliverHennhoefer
相关产品推荐
相关产品推荐

