【问题标题】:Pandas dataframe with column of timestamps and timezones带有时间戳和时区列的 Pandas 数据框
【发布时间】:2015-09-08 20:10:21
【问题描述】:

我有一个 pandas 数据框,其中有一列时间戳和一列时间戳所在的时区。将所有这些时间戳转换为 UTC 时间的最佳方法是什么?

csv 中的样本数据:

0,2000-01-28 16:47:00,America/Chicago
1,2000-01-29 16:48:00,America/Chicago
2,2000-01-30 16:49:00,America/Los_Angeles
3,2000-01-31 16:50:00,America/Chicago
4,2000-01-01 16:50:00,America/New_York

【问题讨论】:

  • 添加数据框的 sn-p

标签: python pandas timezone


【解决方案1】:

这可以通过一次转换一个 tz 来有效地完成(但由于我们有很多,groupby 已经将它们分开了)。这些是当地时间(给定时区的 IOW),所以tz_localize 使这些 tz 感知。然后,当我们将它们组合起来时,它们会自动转换为 UTC。

请注意,这是在 master/0.17.0 上,即将发布。

In [19]: df = read_csv(StringIO(data),header=None, names=['value','date','tz'])

In [20]: df.dtypes
Out[20]: 
value     int64
date     object
tz       object
dtype: object

In [21]: df
Out[21]: 
   value                 date                   tz
0      0  2000-01-28 16:47:00      America/Chicago
1      1  2000-01-29 16:48:00      America/Chicago
2      2  2000-01-30 16:49:00  America/Los_Angeles
3      3  2000-01-31 16:50:00      America/Chicago
4      4  2000-01-01 16:50:00     America/New_York

In [22]: df['utc'] = df.groupby('tz').date.apply(
                lambda x: pd.to_datetime(x).dt.tz_localize(x.name))

In [23]: df
Out[23]: 
   value                 date                   tz                 utc
0      0  2000-01-28 16:47:00      America/Chicago 2000-01-28 22:47:00
1      1  2000-01-29 16:48:00      America/Chicago 2000-01-29 22:48:00
2      2  2000-01-30 16:49:00  America/Los_Angeles 2000-01-31 00:49:00
3      3  2000-01-31 16:50:00      America/Chicago 2000-01-31 22:50:00
4      4  2000-01-01 16:50:00     America/New_York 2000-01-01 21:50:00

In [24]: df.dtypes
Out[24]: 
value             int64
date             object
tz               object
utc      datetime64[ns]
dtype: object

df['utc'] = df['utc'].dt.tz_localize(None)

转换为 UTC

【讨论】:

    【解决方案2】:

    一般情况下:结合 2 个 csv 时间期间 导入(或之前)。这可以通过一个小的 lambda 函数来完成。

    要转换(解析)组合信息,存在几个选项。大多数都在此处或 pandas-docs 中进行了描述。我个人喜欢utils.parse 之一。

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 2021-06-25
      • 2019-01-28
      • 2020-11-26
      • 1970-01-01
      • 2021-08-21
      • 2021-02-08
      • 2016-07-21
      • 2020-04-20
      相关资源
      最近更新 更多