将pandas时间索引本地化时出现NonExistentTimeError

6 投票
1 回答
7394 浏览
提问于 2025-04-18 17:00

我正在使用 dataframe.index = dataframe.index.tz_localize('Iran') 来设置我的 Pandas 数据框的日期时间索引的时区。问题是,Django 报出了一个 NonExistentTimeError 的错误。

Django 的 setting.py 文件中的时区设置为我的本地时区。也就是 TIME_ZONE = 'Iran'

数据框:

2014-08-11 12:00:00+00:00  3076.366
2014-08-11 11:45:00+00:00  3076.367
2014-08-11 11:30:00+00:00  3076.385
2014-08-11 11:15:00+00:00  3076.417
2014-08-11 11:00:00+00:00  3076.466
2014-08-11 10:45:00+00:00  3076.532
2014-08-11 10:30:00+00:00  3076.611
2014-08-11 10:15:00+00:00  3076.702
2014-08-11 10:00:00+00:00  3076.802
2014-08-11 09:45:00+00:00  3076.910

In [112]:dataframe.index.tzinfo
In [113]:<StaticTzInfo 'GMT'>

[10 行 x 1 列]

1 个回答

8

当你试图将一个在你指定的时区中不存在的datetime进行本地化时,NonExistentTimeError这个错误就会被抛出,这个错误来自于pytz库。

你可能会好奇,时间怎么会“不存在”呢?其实,很多时区的当地时间会受到夏令时的影响。有时候,地方政府的调整也会导致时间的变化。

在你提到的例子中,所有的时间值都是在2014年8月11日。伊朗的夏令时调整要到2014年9月21日才会发生,可以在这里查看。如果你的某个时间值是2014-09-21 11:30:00,那就说得通了。我只能推测你没有提供导致错误的实际数据。请检查一下你的数据。

另外,你应该使用完整的时区名称,也就是'Asia/Tehran'。虽然现在'Iran'可能也能用,但那只是为了兼容旧版本,最好还是用标准的时区名称。你可以参考维基百科上的这个列表

撰写回答