Multiindex and timezone - Frozen list error

泪湿孤枕 提交于 2019-12-17 20:27:05

问题


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')

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.


回答1:


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'])


来源:https://stackoverflow.com/questions/26629095/multiindex-and-timezone-frozen-list-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!