为啥 Pandas 不会产生不明确的时间错误?

Posted

技术标签:

【中文标题】为啥 Pandas 不会产生不明确的时间错误?【英文标题】:Why Doesn't Pandas Produce an Ambiguous Time Error?为什么 Pandas 不会产生不明确的时间错误? 【发布时间】:2017-05-23 23:23:06 【问题描述】:

2016 年daylight savings time 开始于美国东部时间2am on 2016-03-13,结束于2am on 2016-11-06。所以,2016-03-13 02:30:00 不是一个有效的时间戳2016-11-06 01:30:00 出现了两次。

我希望这段代码会抛出关于时间不明确和不存在的错误,但它不会:

from pandas import Timestamp

no_such_time = "2016-03-13 02:30:00"
ambiguous_time = "2016-11-06 01:30:30"
est = 'US/Eastern'
utc = 'UTC'

ts1 = Timestamp(no_such_time, tz=est).tz_convert(utc)
ts2 = Timestamp(ambiguous_time, tz=est).tz_convert(utc)

为什么 Pandas 将这两个时间都视为有效时间?

我正在使用 Pandas 0.14.1。

【问题讨论】:

【参考方案1】:

在这段代码中:

ts1 = pd.Timestamp(no_such_time, tz=est)
ts2 = pd.Timestamp(ambiguous_time, tz=est)

pandas 会将这两个时间都转换为时区感知时间戳。它似乎在没有意识到潜在问题的情况下这样做(IE,它是非常宽容的)。转换后,时间戳已在内部以 UTC 格式存储,并带有关联的时区。因此,随后对tz_convert 的调用将正常工作:

ts1 = pd.Timestamp(no_such_time, tz=est).tz_convert(utc)
ts2 = pd.Timestamp(ambiguous_time, tz=est).tz_convert(utc)

如果您确实想确定时间戳是否有误,可以这样做:

ts1 = pd.Timestamp(no_such_time).tz_localize(est)
ts2 = pd.Timestamp(ambiguous_time).tz_localize(est)

在这些情况下,pandas 将分别引发 NonExistentTimeErrorAmbiguousTimeError

【讨论】:

因此,如果我正确理解了这个答案,我应该始终安全地在 US/EasternUTC 之间进行转换?

以上是关于为啥 Pandas 不会产生不明确的时间错误?的主要内容,如果未能解决你的问题,请参考以下文章

错误:系列的真值不明确 - Python pandas

为啥大型静态数组会产生段错误而动态却不会? (C++)

为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?

std::string 生成链接器错误—— const char* 不会。为啥?

pandas 错误:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

为啥针对精度优化模型会引发错误:由于没有预测样本,精度定义不明确并设置为 0.0?