使用cf-python从NetCDF时间序列计算年总降水时遇类型错误
解决cf-python计算年降水量的UFuncTypeError错误
这个错误是因为按年分组计算时,时间坐标的int64类型与运算产生的float64类型不兼容,导致减法操作无法完成同类型转换。以下是几种解决方法:
方法一:转换时间坐标类型为float64
读取数据后,先将时间坐标的类型转为float64,消除类型不匹配问题:
import cf file_in = "C:/Users/gilunga/Documents/Projet CIV/processing/pr_day_INM-CM4-8_historical_r1i1p1f1_gr1_19750101-20141231_regrid.nc" data = cf.read(file_in)[0] # 转换时间坐标类型为float64 data.coordinate('T').convert_dtype('float64') group = cf.Y(month=1) a = data.collapse("T: sum", group=group)
方法二:直接按自然年分组(无需指定month参数)
如果不需要自定义年起始月份,直接使用默认的自然年分组,避免触发类型转换问题:
import cf file_in = "C:/Users/gilunga/Documents/Projet CIV/processing/pr_day_INM-CM4-8_historical_r1i1p1f1_gr1_19750101-20141231_regrid.nc" data = cf.read(file_in)[0] # 按自然年分组求和 a = data.collapse("T: sum", group=cf.Y())
方法三:确保时间坐标为标准cf.Time类型
如果数据的时间坐标是数值型而非cf.Time类型,先将其解析为标准时间类型再计算:
import cf file_in = "C:/Users/gilunga/Documents/Projet CIV/processing/pr_day_INM-CM4-8_historical_r1i1p1f1_gr1_19750101-20141231_regrid.nc" data = cf.read(file_in)[0] # 检查并转换时间坐标为cf.Time类型 time_coord = data.coordinate('T') if not isinstance(time_coord, cf.Time): time_coord = cf.Time(time_coord.array, units=time_coord.units) data.set_coordinate(time_coord, 'T') group = cf.Y(month=1) a = data.collapse("T: sum", group=group)
内容的提问来源于stack exchange,提问作者corp_guy
相关产品推荐
相关产品推荐

