Polars中如何基于zone_info列将UTC时间转换为本地时区
Polars动态时区转换实现方案
问题原因
Polars的dt.convert_time_zone方法的time_zone参数仅支持字符串常量,无法直接传入列表达式,因此直接用pl.col("zone_info")作为参数会抛出TypeError。
解决方案
方案1:逐行处理(适合小数据量)
利用map_elements函数,将zone_info列作为辅助参数传入,逐行完成时区转换:
pdf2 = pdf1.with_columns( pl.col("UTC").map_elements( lambda dt_val, tz: dt_val.convert_time_zone(tz), with_columns=["zone_info"], return_dtype=pl.Datetime ).alias("LocalTime") )
注意:此方法为逐行操作,数据量较大时性能会受影响。
方案2:分组批量转换(适合大数据量)
通过group_by按时区分组,每组内统一执行向量化的时区转换,效率更高:
pdf2 = pdf1.group_by("zone_info").map_groups( lambda group_df: group_df.with_columns( pl.col("UTC").dt.convert_time_zone(group_df["zone_info"][0]).alias("LocalTime") ) )
此方法充分利用Polars的向量化优势,处理大规模数据集时推荐使用。
内容的提问来源于stack exchange,提问作者Nithin
相关产品推荐
相关产品推荐

