无法转换 Pandas 数据帧时间戳

Posted

技术标签:

【中文标题】无法转换 Pandas 数据帧时间戳【英文标题】:Failing to convert Pandas dataframe timestamp 【发布时间】:2015-05-08 17:36:26 【问题描述】:

我对使用 Pandas 很陌生,我正在试图弄清楚为什么这个时间戳不会转换。例如,一个单独的时间戳是字符串'2010-10-06 16:38:02'。代码如下所示:

newdata = pd.DataFrame.from_records(data, columns = ["col1", "col2", "col3", "timestamp"], index = "timestamp")
newdata.index = newdata.index.tz_localize('UTC').tz_convert('US/Eastern')

并得到这个错误:

AttributeError: 'Index' object has no attribute 'tz_localize'

有人评论 here tz_localize 不是索引类型可用的方法,所以我尝试将其转换为列,但出现错误

TypeError: index is not a valid DatetimeIndex or PeriodIndex

然后我找到了this site,它说 tz_localize only 无论如何都对索引起作用。

如果有人可以帮助我,将不胜感激!我正在使用熊猫 0.15.2。我相信这段代码可能适用于其他人的早期版本,但我无法切换。

编辑:

好吧,在搞砸了一点之后,我发现这不会引发任何错误,并且似乎在短期内做了我想做的事情:newdata.index=pd.DatetimeIndex(newdata.index).tz_localize('UTC').tz_convert('US/‌​Eastern')

【问题讨论】:

艾琳,您能否添加一个答案并将问题标记为已解决?否则,它会以未答复的形式弹出并让人们感到困惑...... 【参考方案1】:

我被要求添加一个正式的答案,而不仅仅是编辑我的问题,所以就在这里。请注意,它建立在上面的答案之上,但那个答案对我来说不太适用。

newdata.index=pd.DatetimeIndex(newdata.index).tz_localize('UTC').tz_convert('US/‌​Eastern')

【讨论】:

【参考方案2】:

您必须先将索引列转换为 pandas 中的系列类型:

newdata.index.to_series().tz_localize('UTC').tz_convert('US/Eastern')

【讨论】:

这不是简单的方法。 @Erin 提到了它,这就是(恕我直言)要走的路。

以上是关于无法转换 Pandas 数据帧时间戳的主要内容,如果未能解决你的问题,请参考以下文章

遍历 Float 时间戳的 Pandas DataFrame 并转换为日期时间

如何使用带有 Pandas 的时间戳按小时对数据帧进行分组

使用 Pandas query() 过滤时间戳列上的数据帧

如何将 pandas 时间戳添加到数据帧 post read_csv

Pandas 将多个数据帧与时间戳索引对齐

将 Pandas 数据帧与多索引列和不规则时间戳连接起来