NumPy 时区处理怎么搞?如何正确处理时间区域数据?

文章导读
Previous Quiz Next NumPy 中的时区处理 NumPy 中的时区处理允许您管理不同时区之间的 datetime 数据。这在处理全球时间相关数据时非常重要,例如股票市场时间戳、天气数据或国际事件,需要进行时区转换以进行准确分析。
📋 目录
  1. NumPy 中的时区处理
  2. 使用 'datetime64' 处理时区
  3. 时区之间的转换
  4. 数据中对齐时区
A A

NumPy - 时区处理



Previous
Quiz
Next

NumPy 中的时区处理

NumPy 中的时区处理允许您管理不同时区之间的 datetime 数据。这在处理全球时间相关数据时非常重要,例如股票市场时间戳、天气数据或国际事件,需要进行时区转换以进行准确分析。

虽然 NumPy 不像某些其他库(如 'pytz' 或 'pandas')那样内置支持时区,但它允许您处理 datetime 对象,并且您可以使用外部库如 'pytz' 进行时区转换。

NumPy 的 datetime64 对象是 timezone-naive 的,即它们不存储时区信息,但您可以使用兼容工具手动调整它们。

使用 'datetime64' 处理时区

默认情况下,NumPy 中的 'datetime64' 对象是 timezone-naive 的,即它们不存储时区信息。如果需要显式处理时区,您需要将 NumPy 与 'pytz' 或 Python 'datetime' 模块中的 'timezone' 等库结合使用。

要转换时区或处理时区感知的 datetime 数据,您可以结合外部工具与 NumPy 数组来管理不同时区之间的 datetime 转换和对齐。

示例

在以下示例中,我们将 NumPy 与 'pytz' 库结合使用来处理时区转换。首先,我们使用 NumPy 创建一个 datetime 数组,然后将 datetime 调整到不同的时区 −

import numpy as np
import pytz
from datetime import datetime

# 定义一个 datetime 数组
dates = np.array(['2024-01-01T12:00', '2024-01-02T12:00'], dtype='datetime64[m]')

# 转换为 Python datetime 对象
# 使用 astype('O') 将 datetime64 转换为 datetime 对象
dt_objects = [d.item() for d in dates]

# 使用 pytz 定义时区
timezone = pytz.timezone('US/Eastern')

# 将每个 datetime 转换为新时区
localized_dates = [timezone.localize(dt) for dt in dt_objects]

# 打印本地化时间
for date in localized_dates:
   print(date.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

输出将显示转换为东部时区 (ET) 的 datetime 值 −

2024-01-01 12:00:00 EST-0500
2024-01-02 12:00:00 EST-0500

时区之间的转换

在处理 datetime 数据时,时区之间的转换通常是必要的。这可以使用外部库如 'pytz' 完成。在创建时区感知的 datetime 对象后,您可以使用 astimezone() 方法轻松将其转换为另一个时区。

示例

在以下示例中,我们首先将 datetime 对象转换为东部标准时间 (EST),然后转换为太平洋标准时间 (PST) −

import pytz
from datetime import datetime

# 创建一个 datetime 对象
dt = datetime(2024, 1, 1, 12, 0, 0)

# 定义时区(东部时区)
eastern = pytz.timezone('US/Eastern')

# 将 datetime 本地化为东部时间
localized_dt = eastern.localize(dt)

# 转换为太平洋时区
pacific = pytz.timezone('US/Pacific')
pacific_dt = localized_dt.astimezone(pacific)

print("Eastern Time: ", localized_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
print("Pacific Time: ", pacific_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

执行上述代码后,您将得到以下输出 −

Eastern Time:  2024-01-01 12:00:00 EST-0500
Pacific Time:  2024-01-01 09:00:00 PST-0800

数据中对齐时区

在处理数据中的多个时区时,对齐不同时区的 datetime 数据非常重要。您可能需要将所有 datetime 转换为一个共同的时区(例如 UTC),以确保准确的比较和计算。

您可以通过将每个 datetime 对象转换为目标时区,来对齐带有时区感知的 datetime 到一个共同的时区。这可以使用相同的 'pytz' 库或 'datetime' 模块进行调整。

示例

在这个示例中,我们将来自不同时区的两个 datetime 对象对齐到 UTC −

import pytz
from datetime import datetime

# 创建两个不同时区的 datetime 对象
dt1 = datetime(2024, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('US/Eastern'))
dt2 = datetime(2024, 1, 1, 12, 0, 0, tzinfo=pytz.timezone('US/Pacific'))

# 将两个 datetime 转换为 UTC
dt1_utc = dt1.astimezone(pytz.utc)
dt2_utc = dt2.astimezone(pytz.utc)

# 在 UTC 中打印两个 datetime 对象
print("Eastern to UTC: ", dt1_utc.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
print("Pacific to UTC: ", dt2_utc.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

输出将显示两个 datetime 已对齐到 UTC −

Eastern to UTC:  2024-01-01 16:56:00 UTC+0000
Pacific to UTC:  2024-01-01 19:53:00 UTC+0000