python pandas TimeStamps到夏令时的本地时间字符串

Posted

技术标签:

【中文标题】python pandas TimeStamps到夏令时的本地时间字符串【英文标题】:python pandas TimeStamps to local time string with daylight saving 【发布时间】:2015-06-03 20:26:43 【问题描述】:

我有一个带有 TimeStamps 列的数据框。我想将其转换为本地时间字符串,即夏令时。

所以我想将下面的 ts[0] 转换为“2015-03-30 03:55:05”。 Pandas 似乎知道 DST,但仅当您在系列上调用 .values 时。

谢谢

(Pdb) ts = df['TimeStamps']
(Pdb) ts
0   2015-03-30 02:55:05.993000
1   2015-03-30 03:10:20.937000
2   2015-03-30 10:09:19.947000
Name: TimeStamps, dtype: datetime64[ns]
(Pdb) ts[0]
Timestamp('2015-03-30 02:55:05.993000')
(Pdb) ts.values
array(['2015-03-30T03:55:05.993000000+0100',
   '2015-03-30T04:10:20.937000000+0100',
   '2015-03-30T11:09:19.947000000+0100'], dtype='datetime64[ns]')

【问题讨论】:

您的本地时区是什么(例如,Europe/London)? 2015-03-30 是否有夏令时过渡? 嗨,是的,DST 于 2015 年 3 月 29 日开始。 UTC 中的时间戳是正确的,但我找不到在伦敦时间将其显示为字符串的方法。 @Alexander 明白了。 相关:Converting timezones from pandas Timestamps 【参考方案1】:

DST 与您所在的位置相关(例如,伦敦 DST 比纽约晚几周开始)。您首先需要知道时间戳时区:

from pytz import UTC
from pytz import timezone
import datetime as dt

ts = pd.Timestamp(datetime.datetime(2015, 3, 31, 15, 47, 25, 901597))
# or...
ts = pd.Timestamp('2015-03-31 15:47:25.901597')
# ts is a Timestamp, but it has no idea where in the world it is...
>>> ts.tzinfo is None
True

# So the timestamp needs to be localized.  Assuming it was originally a UTC timestamp, it can be localized to UTC.
ts_utc = ts.tz_localize(UTC)
# Once localized, it can be expressed in other timezone regions, e.g.: 
eastern = pytz.timezone('US/Eastern')
ts_eastern = ts_utc.astimezone(eastern)
# And to convert it to an ISO string of local time (e.g. eastern):
>>> ts_eastern.isoformat()
'2015-03-30T08:09:27.143173-04:00'

请参阅pytz 或datetime 了解更多信息。

【讨论】:

如果dtdatetime 模块,则在此处使用utcnow() 而不是now() 当然,但重点是展示如何将本地时间戳转换为 UTC('now' 实例只是一个示例)。除了显示时,始终以 UTC 时间处理被认为是最佳做法。 欧洲/伦敦时区!= UTC!!!不要使用 .now()(以 local 时区返回时间),那么您的意思是 .utcnow()(以 UTC 时间返回)! 从未说过它们是,但我更新了示例以阐明步骤。 是否明白在这种特殊情况下使用.now() 代替.utcnow() 相当于说Europe/London == UTC? (OP 的本地时区是欧洲/伦敦)。

以上是关于python pandas TimeStamps到夏令时的本地时间字符串的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 处理时间序列数据

将 datetime.date 的表示形式转换为 pandas.Timestamp 的表示形式

如何将 TIMESTAMPS 格式转换为与 Impala 兼容

Wireshark tcp包里的timestamps为啥会没有????

如何使用 use_wallclock_as_timestamps?

python:pandas - 如何将前两行 pandas 数据帧组合到数据帧头?