如何将prolepticGregorian类型转换为datetime以实现DataFrame重采样?
解决cftime时间索引转pandas DatetimeIndex的问题
以下几种方法可将cftime._cftime.DatetimeProlepticGregorian类型的时间索引转换为pandas兼容的DatetimeIndex,从而支持resample操作:
方法一:手动构造Python标准datetime对象
遍历cftime数组,提取时间分量构造标准datetime对象,再作为DataFrame索引:
from datetime import datetime # 截取目标时间范围并转换为标准datetime列表 target_times = time_convert[yr_id_start:yr_id_end] datetime_index = [datetime(t.year, t.month, t.day, t.hour, t.minute, t.second) for t in target_times] # 创建带正确时间索引的DataFrame DatFrame1 = pd.DataFrame(columns=range(len(lats)), index=datetime_index)
方法二:通过字符串批量转换
将每个cftime对象转为字符串,再用pandas的to_datetime统一转换:
# 转换时间索引 datetime_index = pd.to_datetime([str(t) for t in time_convert[yr_id_start:yr_id_end]]) DatFrame1 = pd.DataFrame(columns=range(len(lats)), index=datetime_index)
方法三:用xarray简化netCDF数据处理(推荐)
xarray会自动处理netCDF中的时间索引,直接转换为pandas兼容的DatetimeIndex,无需手动处理:
import xarray as xr # 读取netCDF文件 ds = xr.open_dataset(rsds_nc_filepath) # 按时间范围截取数据(替换为实际起止年份,如'2022'到'2071') ds_subset = ds.sel(time=slice('2022', '2071')) # 转换为pandas DataFrame,时间索引自动适配 DatFrame1 = ds_subset['rsdsAdjust'].to_pandas()
执行重采样
完成时间索引转换后,即可正常执行重采样计算:
# 对转换后的Series/DataFrame进行小时均值重采样 resampled_data = i3h.resample("1H").mean()
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

