如何使用Pandas strftime方法获取带冒号的时区标识
Pandas Timestamp 格式化带冒号的时区字符串问题
问题场景
使用pd.Timestamp.today(tz='Europe/London')生成带时区的时间戳,想要格式化为'2023-12-04 16:08:02+00:00'这种时区部分带冒号的样式,但直接用strftime('%Y-%m-%d %X%:z')会抛出ValueError: Invalid format string,因为Pandas不识别%:z指令。
问题原因
虽然Pandas文档声称支持所有Python原生strftime指令,但实际上Timestamp的strftime方法并未完全兼容Python datetime的扩展格式(比如%:z这种带修饰符的时区格式),其底层实现依赖平台或自身限制,不支持这类语法。
解决方案
方法1:转成Python datetime对象格式化
利用Python原生datetime的strftime支持%:z的特性,先将Timestamp转为datetime对象:
import pandas as pd ts = pd.Timestamp.today(tz='Europe/London') formatted_time = ts.to_pydatetime().strftime('%Y-%m-%d %X%:z') print(formatted_time)
方法2:手动拼接时区部分
先格式化日期时间主体,再处理时区偏移的格式:
import pandas as pd ts = pd.Timestamp.today(tz='Europe/London') # 格式化日期时间部分 dt_str = ts.strftime('%Y-%m-%d %X') # 获取原始时区字符串(如+0000),插入冒号 tz_raw = ts.strftime('%z') tz_str = f"{tz_raw[:3]}:{tz_raw[3:]}" if tz_raw else "" # 拼接最终结果 formatted_time = f"{dt_str}{tz_str}" print(formatted_time)
方法3:使用isoformat方法(最简单)
Pandas的Timestamp自带isoformat方法,指定分隔符为空格后,直接输出符合要求的格式:
import pandas as pd ts = pd.Timestamp.today(tz='Europe/London') formatted_time = ts.isoformat(sep=' ') print(formatted_time)
内容的提问来源于stack exchange,提问作者I hate coding
相关产品推荐
相关产品推荐

