如何在Polars中实现Pandas本地化strftime的等效功能?
在Polars中实现本地化日期格式化
Polars的dt.strftime基于Rust的chrono库,该库默认不读取系统设置的locale,因此即使通过Python的locale.setlocale配置了区域,也不会直接生效。以下是两种可行的解决方案:
方法1:使用map_elements调用Python的datetime格式化
借助Python标准库的strftime(会尊重系统locale),通过Polars的map_elements逐元素处理日期:
import polars as pl from datetime import datetime import locale # 设置乌克兰语区域 locale.setlocale(locale.LC_TIME, "uk_UA.UTF-8") date_1 = pl.Series("", [datetime(2023, 11, 8, 19, 15, 7)]) # 映射元素调用Python的strftime完成本地化格式化 localized_dates = date_1.map_elements(lambda dt: dt.strftime("%A, %d %B %Y")) print(localized_dates[0]) # 输出: середа, 08 листопада 2023
方法2:使用map_batches批量处理(更高效)
如果处理大量数据,批量转换为Python列表后统一格式化的性能更优:
import polars as pl from datetime import datetime import locale locale.setlocale(locale.LC_TIME, "uk_UA.UTF-8") date_1 = pl.Series("", [datetime(2023, 11, 8, 19, 15, 7), datetime(2023, 12, 25)]) def format_batch(batch): return [dt.strftime("%A, %d %B %Y") for dt in batch.to_list()] localized_dates = date_1.map_batches(format_batch, return_dtype=pl.String) print(localized_dates) # 输出: # shape: (2,) # Series: '' [str] # [ # "середа, 08 листопада 2023" # "понеділок, 25 грудня 2023" # ]
注意事项
- 确保目标系统已安装对应locale包(比如Ubuntu下需要安装
language-pack-uk),否则locale.setlocale会抛出异常。 - 目前Polars官方尚未支持通过
dt.strftime直接读取系统locale,后续版本可能会新增相关功能,可关注Polars更新日志。
内容的提问来源于stack exchange,提问作者codkelden
相关产品推荐
相关产品推荐

