Polars如何高效批量将_at结尾列转为datetime类型?
批量将Polars中以'_at'结尾的列转换为datetime类型
问题原因
你之前的代码无法运行,是因为cs.ends_with('_at')返回的是Selector选择器对象,而非Polars的列表达式(Expr),所以不能直接链式调用.str.to_datetime()方法。
可行解决方案
方法1:用pl.col()包裹选择器(推荐)
直接将选择器作为参数传入pl.col(),生成对应的列表达式后再进行转换:
import polars as pl import polars.selectors as cs df = df.with_columns( pl.col(cs.ends_with('_at')).str.to_datetime("%Y-%m-%dT%H:%M:%S%.3f%:z") )
方法2:通过选择器获取列名列表后转换
先提取所有目标列的名称,再用列名列表生成列表达式:
import polars as pl import polars.selectors as cs # 获取所有以'_at'结尾的列名 dt_col_names = df.select(cs.ends_with('_at')).columns # 批量转换 df = df.with_columns(pl.col(dt_col_names).str.to_datetime("%Y-%m-%dT%H:%M:%S%.3f%:z"))
方法3:用pipe()处理选择器
利用选择器的pipe()方法,将选择到的列传递给转换逻辑:
import polars as pl import polars.selectors as cs df = df.with_columns( cs.ends_with('_at').pipe( lambda cols: pl.col(cols).str.to_datetime("%Y-%m-%dT%H:%M:%S%.3f%:z") ) )
所有方法都能实现批量转换,其中方法1最简洁高效,符合Polars的API设计风格。
内容的提问来源于stack exchange,提问作者Jackson H
相关产品推荐
相关产品推荐

