You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:42:45