Pythonpandas tz_localize抛出不介绍时间,然后无法删除错误的时间

问题描述 投票:0回答:2
在python pandas,我有一个看起来像这样的数据集:

enter image description here

对于2007-04-26之前的数据17:00:00,时区是美国/东部。对于此之后,时区为美国/芝加哥。

当我运行这个:

data.index = data[:'2007-04-26 16:59:59'].index.tz_localize('US/Eastern', ambiguous = 'NaT').tz_convert('Europe/London')

我有一个错误,说:

NonExistentTimeError: 2006-04-02 02:00:00

这确实是由于夏令时的储蓄时间。我在2007年有同样的问题。随后的几年我没有问题。理想情况下,我想要两个命令 - 一个将数据集的上半年从东部转换为伦敦,另一个将下半部分从芝加哥转变为伦敦。

由于不起作用,我尝试丢下这些时间(我相信一个小时),例如。 02:00:00至03:00:00在夏令时节省时间。但是,当我运行

data.drop(data.ix['2005-04-03 2:00:00':'2005-04-03 3:00:00'], inplace=True)

我得到
ValueError: labels ['open' 'high' 'low' 'close' 'volume'] not contained in axis

有人知道我如何简单地转换这段时间?任何帮助将不胜感激。 thanks, Alex

aupdate添加更多信息:

ok我使用了以下代码,该代码努力删除了冒犯时间:

update2:

mask = ((data.index<datetime.strptime("2006-04-02 02:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2006-04-02 03:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2005-04-03 02:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2005-04-03 03:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2005-10-30 01:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2005-10-30 02:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2006-10-29 01:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2006-10-29 02:00:00","%Y-%m-%d %H:%S:%M"))) data_filtered = data[mask] data_filtered.ix = data_filtered.tz_localize('US/Eastern', infer_dst=True).tz_convert('Europe/London') enter image description here

但是现在我得到了这个错误:

data_filtered.ix = data_filtered.tz_localize('US/Eastern', infer_dst=True).tz_convert('Europe/London') Traceback (most recent call last): File "<ipython-input-38-0fc8a9e68588>", line 1, in <module> data_filtered.ix = data_filtered.tz_localize('US/Eastern', infer_dst=True).tz_convert('Europe/London') File "C:\Anaconda\lib\site-packages\pandas\core\generic.py", line 1955, in __setattr__ object.__setattr__(self, name, value) AttributeError: can't set attribute

对此有任何想法吗?我做了一些谷歌搜索,但找不到任何真正相关的东西。
	

您的drop命令看起来不应该根据文档中的描述来起作用。为了摆脱冒犯时间,我会在数据框架上创建一个掩码,即:

from datetime import datetime
mask =  ((df.index<datetime.strptime("2006-04-02 02:00:00","%Y-%m-%d %H:%S:%M") | (df.index>datetime.strptime("2006-04-02 03:00:00","%Y-%m-%d %H:%S:%M")) # probably add some    more years here as or clauses

df_filtered = df[mask]

可能也有一种方法可以使掉落工作。检查此相关问题:

填充日光的排行,从时间索引pandasdataframe
python pandas timezone dst
2个回答
2
投票
节省时间

在以后的功能上:大熊猫在方法中处理不存在的时间
tz_localize

,带有nonexistent参数:

https://pandas.pydata.org/pandas-docs/stable/reference/parpi/api/pandas.series.tz_localize.html

0
投票


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.