将多个 UTC 时间戳列转换为 pandas 数据帧中的 US/Pacific

Converting multiple UTC timestamps columns to US/Pacific in pandas dataframe

我有一个包含 2 个时间戳列的数据集,字符串格式为 YYYY-mm-dd HH:mm:ss。这些时间戳的时区不包含在字符串中,但它们是 UTC,我想将它们转换为 US/Pacific.

我的数据集在一个 csv 文件中,所以我正在使用

解析这 2 个时间戳列

df = pd.read_csv("my_dataset.csv", parse_dates=['timestamp_col1', 'timestamp_col2'])

阅读此处的一些帖子后,似乎以下(仅一栏示例)可能是一个可能的解决方案

pd.to_datetime(df.timestamp_col1, utc=True).astimezone(timezone('US/Pacific'))

但是,我收到以下错误。关于如何解决这个问题的任何见解或是否有更好的方法来做到这一点?

'Series' object has no attribute 'astimezone'

您似乎在寻找 dt.tz_convert:

pd.to_datetime(df.timestamp_col, utc=True)
#0   2022-10-10 10:10:00+00:00
#Name: timestamp_col, dtype: datetime64[ns, UTC]

pd.to_datetime(df.timestamp_col, utc=True).dt.tz_convert(tz="US/Pacific")
#0   2022-10-10 03:10:00-07:00
#Name: timestamp_col, dtype: datetime64[ns, US/Pacific]

数据:

df = pd.read_csv(StringIO("""timestamp_col
2022-10-10 10:10:00
"""), parse_dates=['timestamp_col'])

df
        timestamp_col
0 2022-10-10 10:10:00

pandas.Timestamp 对象具有其本地时区功能。使用 tz 参数对其进行本地化,并使用 tz_convert() 方法对其进行简单转换。所以不需要混合包

pd.Timestamp.now(tz='UTC').tz_convert('US/Pacific')

This post 也涵盖了它。

您还可以使用 apply

转换系列的所有时间戳
sr = pd.Series([pd.Timestamp.now(tz='UTC'), pd.Timestamp.now(tz='UTC')])
sr.apply(lambda x: x.tz_convert('US/Pacific'))

需要使用此解决方法,因为 pandas.Series.tz_conver() 需要 pandas.DatetimeIndex 以便它转换索引而不是值。