【问题标题】:Pandas: how to convert an index of int64 epoc seconds to datetimePandas:如何将 int64 纪元秒的索引转换为日期时间
【发布时间】:2016-10-01 21:03:33
【问题描述】:

我有一些时区信息存储在一个名为 tz_pytz 的变量中——我从一个 hdf5 文件中获得了该信息以及数据框,但这现在并不重要。

我有一个 int64 索引,表示自纪元以来的第二个值,我想将其视为带有时区信息的时间戳:

>>> df = pd.DataFrame(h5file['time']).sec
Int64Index([0, ...], dtype='int64')
>>> dt = pd.to_datetime(df, unit='s')
>>> type(dt[0])
pandas.tslib.Timestamp
>>> dt[0].tz is None
True
>>> dt
0    2015-05-29 07:18:22
1    2015-05-29 07:18:23
...
4478   2015-05-29 08:33:06
4479   2015-05-29 08:33:07
Name: sec, Length: 4480, dtype: datetime64[ns]

这可以正常工作,但数据不支持时区 (tz is None)。如何根据我在py_pytz 中的时区使其感知时区?

【问题讨论】:

  • 您使用的是什么版本的 pandas 和 numpy?这在 0.18.1 中运行良好,这里的问题是您将整数数组转换为没有时区信息的时间戳,因此您必须添加此
  • @EdChum:我知道它有效并且没有时区信息。因此问题。我猜我不清楚。

标签: python datetime pandas


【解决方案1】:

使用.tz_localize 将时区添加到您的日期时间列:

In [12]:
df = pd.DataFrame(index=np.arange(10))
df['timestamp'] = pd.to_datetime(df.index, unit='s')
df['timestamp'] = df['timestamp'].dt.tz_localize('Asia/Hong_Kong')
df['timestamp']

Out[12]:
0   1970-01-01 00:00:00+08:00
1   1970-01-01 00:00:01+08:00
2   1970-01-01 00:00:02+08:00
3   1970-01-01 00:00:03+08:00
4   1970-01-01 00:00:04+08:00
5   1970-01-01 00:00:05+08:00
6   1970-01-01 00:00:06+08:00
7   1970-01-01 00:00:07+08:00
8   1970-01-01 00:00:08+08:00
9   1970-01-01 00:00:09+08:00
Name: timestamp, dtype: datetime64[ns, Asia/Hong_Kong]

这会将tz 信息添加/删除到您的时间戳列,它接受字符串pytzdateutil.tz.tzfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2018-04-24
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多