如何用Python xarray将儒略历时间转换为标准日历格式?
处理xarray中儒略历时间格式转换问题
针对你遇到的儒略历时间(days since 0001-01-01 00:00:00格式)转换问题,以下是两种简便可行的方法:
方法一:加载时自动解码时间
如果NetCDF文件的时间变量带有units和calendar属性,你可以在加载数据集时直接让xarray自动解码:
import xarray as xr # 加载文件时启用时间解码,xarray会自动识别儒略历属性 ds = xr.open_dataset('your_dataset.nc', decode_times=True)
如果自动识别失败,可手动指定日历类型:
from xarray.coding.times import CFTimeCalendar ds = xr.open_dataset( 'your_dataset.nc', decode_times=True, calendar=CFTimeCalendar('julian') )
方法二:手动解码已加载的时间变量
如果已经加载了数据集,时间仍以天数数值存在,可以用xarray内置的时间解码工具处理:
import xarray as xr from xarray.coding.times import decode_cf_datetime # 假设已加载数据集ds time_days = ds.time.values time_units = ds.time.attrs['units'] # 对应'days since 0001-01-01 00:00:00' calendar = ds.time.attrs.get('calendar', 'julian') # 解码为可识别的时间对象 decoded_time = decode_cf_datetime(time_days, time_units, calendar=calendar) # 替换原时间变量 ds['time'] = decoded_time
为什么你之前的方法失效?
xarray.Dataset.convert_calendar()的作用是转换日历类型(比如从儒略历转公历),但它要求时间已经是可识别的datetime/CFTime对象,而不是原始的天数数值,所以直接调用会失败。datetime.datetime.strptime()需要输入字符串格式的时间,但你的ds.time是数值数组,类型不匹配,因此报错。
内容的提问来源于stack exchange,提问作者Nho
相关产品推荐
相关产品推荐

