python - xarray - 将函数应用于 DataArray 的时间维度并将结果添加为变量
问题描述
我有一个da
带有名为的变量的 DataArray,FFDI
它具有三个维度time
、latitude
和longitude
。
xarray.DataArray 'FFDI' time: 43848 latitude: 2 longitude: 244
latitude (latitude) float32 -39.2 -39.163948
longitude (longitude) float32 140.8 140.83786 ... 149.96214 150.0
time (time) datetime64[ns] 2000-01-01T00:00:00 2000-01-01T01:00:00 ... 2004-12-31T22:00:00 2004-12-31T23:00:00
我想要实现的是将以下函数应用于time
维度的每个时间戳,以计算时间戳是否在夏令时期间并输出布尔值。
def isDST(dt_str):
local_time_tz = pytz.timezone("Australia/Victoria")
naive_datetime = datetime.datetime.strptime (dt_str, "%Y-%m-%d %H:%M:%S")
a = local_time_tz.localize(naive_datetime)
return bool(a.dst())
输出将是一个 numpy 数组或另一个 DataArray 元素;然后它将作为名为 的附加变量添加到原始 da 中isDST
。
xarray.DataArray 'FFDI' time: 43848 latitude: 2 longitude: 244
latitude (latitude) float32 -39.2 -39.163948
longitude (longitude) float32 140.8 140.83786 ... 149.96214 150.0
time (time) datetime64[ns] 2000-01-01T00:00:00 2000-01-01T01:00:00 ... 2004-12-31T22:00:00 2004-12-31T23:00:00
isDST (time) bool true true ... true true
这可能吗?在 xarray、pandas 或 numpy 中应该使用什么函数?
解决方案
您可以使用简单的列表推导并将新坐标添加到DataArray
:
import xarray as xr
import pytz
# example data
x = xr.tutorial.load_dataset("air_temperature").air
local_time_tz = pytz.timezone("Australia/Victoria")
is_dst = [bool(local_time_tz.localize(x).dst()) for x in x.time.to_index()]
x = x.assign_coords(is_dst=("time", is_dst))
# result
# Coordinates:
# * lat (lat) float32 75.0 72.5 70.0 67.5 65.0 ... 25.0 22.5 20.0 17.5 15.0
# * lon (lon) float32 200.0 202.5 205.0 207.5 ... 322.5 325.0 327.5 330.0
# * time (time) datetime64[ns] 2013-01-01 ... 2014-12-31T18:00:00
# is_dst (time) bool True True True True True ... True True True True True
如果x
是 axarray.Dataset
而不是 axarray.DataArray
你可以简单地做:
x['is_dst'] = [bool(local_time_tz.localize(x).dst()) for x in x.time.to_index()]
推荐阅读
- php - 停止执行直到下一小时开始
- java - Javers - 如何使用 Spring Boot 获取单个记录的所有更改值?
- c# - Unity Web 请求缓存问题
- flutter - 使用 Flutter 进行 Firebase 身份验证
- angular - 如何在 Angular Universal 中显示静态 html 页面
- typescript - TypeScript 类型中成员中“typeof”的目的是什么?
- powershell - 在powershell中替换部分变量而不替换其余部分?
- python - 在 Python 中使用正则表达式获取子字符串
- wpf - 如何在自定义控件中获取控件?
- python-3.x - 我有一个包含两列的数据框。如何删除名称为 Sam、Ben、Ram 的行