多索引和时区-冻结列表错误 [英] Multiindex and timezone - Frozen list error

查看:60
本文介绍了多索引和时区-冻结列表错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试更改多索引DataFrame的时区,但出现冻结列表错误. 有人知道如何进行吗?

I try to change the timezone of a multiindex DataFramebut I get an frozen list error. Has someone any idea how to proceed ?

>>> array = [('s001', d) for d in pd.date_range(start='01/01/2014', end='01/01/2015', freq='H')] + [('s002', d) for d in pd.date_range(start='01/01/2014', end='01/01/2015', freq='H')]
>>> index = pd.MultiIndex.from_tuples(array, names=['sce', 'DATES'])
>>> df = pd.DataFrame(np.random.randn(len(index)), index=index)

>>> df.index.levels[1] = df.index.levels[1].tz_localize('Etc/GMT-1', ambiguous = 'NaT')

回溯(最近一次通话最近):文件",第1行,在 文件 "C:\ Pythons \ lib \ python \ pandas-0.15.0rc1-py2.7-win32.egg \ pandas \ core \ base.py", _disabled中的第221行 自我..名称)TypeError:"FrozenList"不支持可变操作.

Traceback (most recent call last): File "", line 1, in File "C:\Pythons\lib\python\pandas-0.15.0rc1-py2.7-win32.egg\pandas\core\base.py", line 221, in _disabled self.class.name) TypeError: 'FrozenList' does not support mutable operations.

推荐答案

该错误是为了避免在设置级别(而不是标签)时出现不一致,请使用set_levels函数来实现此目的. (也可以就地完成)

That error is on purpose to avoid inconsistency when setting levels (but not labels), use the set_levels functions for this purpose. (it can be done inplace as well)

In [8]: df.index.set_levels(df.index.levels[1].\
            tz_localize('Etc/GMT-1', ambiguous = 'NaT'),level=1)
Out[8]: 
MultiIndex(levels=[[u's001', u's002'], [2014-01-01 01:00:00+01:00, 2014-01-01 02:00:00+01:00, 2014-01-01 03:00:00+01:00, 2014-01-01 04:00:00+01:00, 2014-01-01 05:00:00+01:00, 2014-01-01 06:00:00+01:00, 2014-01-01 07:00:00+01:00, 2014-01-01 08:00:00+01:00, 2014-01-01 09:00:00+01:00, 2014-01-01 10:00:00+01:00, 2014-01-01 11:00:00+01:00, 2014-01-01 12:00:00+01:00, 2014-01-01 13:00:00+01:00, 2014-01-01 14:00:00+01:00, 2014-01-01 15:00:00+01:00, 2014-01-01 16:00:00+01:00, 2014-01-01 17:00:00+01:00, 2014-01-01 18:00:00+01:00, 2014-01-01 19:00:00+01:00, 2014-01-01 20:00:00+01:00, 2014-01-01 21:00:00+01:00, 2014-01-01 22:00:00+01:00, 2014-01-01 23:00:00+01:00, 2014-01-02 00:00:00+01:00, 2014-01-02 01:00:00+01:00, 2014-01-02 02:00:00+01:00, 2014-01-02 03:00:00+01:00, 2014-01-02 04:00:00+01:00, 2014-01-02 05:00:00+01:00, 2014-01-02 06:00:00+01:00, 2014-01-02 07:00:00+01:00, 2014-01-02 08:00:00+01:00, 2014-01-02 09:00:00+01:00, 2014-01-02 10:00:00+01:00, 2014-01-02 11:00:00+01:00, 2014-01-02 12:00:00+01:00, 2014-01-02 13:00:00+01:00, 2014-01-02 14:00:00+01:00, 2014-01-02 15:00:00+01:00, 2014-01-02 16:00:00+01:00, 2014-01-02 17:00:00+01:00, 2014-01-02 18:00:00+01:00, 2014-01-02 19:00:00+01:00, 2014-01-02 20:00:00+01:00, 2014-01-02 21:00:00+01:00, 2014-01-02 22:00:00+01:00, 2014-01-02 23:00:00+01:00, 2014-01-03 00:00:00+01:00, 2014-01-03 01:00:00+01:00, 2014-01-03 02:00:00+01:00, 2014-01-03 03:00:00+01:00, 2014-01-03 04:00:00+01:00, 2014-01-03 05:00:00+01:00, 2014-01-03 06:00:00+01:00, 2014-01-03 07:00:00+01:00, 2014-01-03 08:00:00+01:00, 2014-01-03 09:00:00+01:00, 2014-01-03 10:00:00+01:00, 2014-01-03 11:00:00+01:00, 2014-01-03 12:00:00+01:00, 2014-01-03 13:00:00+01:00, 2014-01-03 14:00:00+01:00, 2014-01-03 15:00:00+01:00, 2014-01-03 16:00:00+01:00, 2014-01-03 17:00:00+01:00, 2014-01-03 18:00:00+01:00, 2014-01-03 19:00:00+01:00, 2014-01-03 20:00:00+01:00, 2014-01-03 21:00:00+01:00, 2014-01-03 22:00:00+01:00, 2014-01-03 23:00:00+01:00, 2014-01-04 00:00:00+01:00, 2014-01-04 01:00:00+01:00, 2014-01-04 02:00:00+01:00, 2014-01-04 03:00:00+01:00, 2014-01-04 04:00:00+01:00, 2014-01-04 05:00:00+01:00, 2014-01-04 06:00:00+01:00, 2014-01-04 07:00:00+01:00, 2014-01-04 08:00:00+01:00, 2014-01-04 09:00:00+01:00, 2014-01-04 10:00:00+01:00, 2014-01-04 11:00:00+01:00, 2014-01-04 12:00:00+01:00, 2014-01-04 13:00:00+01:00, 2014-01-04 14:00:00+01:00, 2014-01-04 15:00:00+01:00, 2014-01-04 16:00:00+01:00, 2014-01-04 17:00:00+01:00, 2014-01-04 18:00:00+01:00, 2014-01-04 19:00:00+01:00, 2014-01-04 20:00:00+01:00, 2014-01-04 21:00:00+01:00, 2014-01-04 22:00:00+01:00, 2014-01-04 23:00:00+01:00, 2014-01-05 00:00:00+01:00, 2014-01-05 01:00:00+01:00, 2014-01-05 02:00:00+01:00, 2014-01-05 03:00:00+01:00, 2014-01-05 04:00:00+01:00, ...]],
           labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...]],
           names=[u'sce', u'DATES'])

这篇关于多索引和时区-冻结列表错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆