cftime.Datetime360Day无法转换为datetime报错解决方案咨询
解决方案
你可以直接调用cftime._cftime.Datetime360Day对象自带的属性提取年/月/日,或者先转成字符串再做转换,两种可行方案如下:
方案1:直接提取对象属性(推荐,性能更高)
Datetime360Day实例原生支持.year、.month、.day属性,直接读取后生成pandas时间戳即可:
df['time'] = df['time'].apply(lambda t: pd.Timestamp(year=t.year, month=t.month, day=t.day))
如果仅需要保留日期字符串不需要datetime对象,也可以直接拼接:
df['time'] = df['time'].apply(lambda t: f"{t.year}-{t.month:02d}-{t.day:02d}")
方案2:先转字符串再转换(写法更简洁)
直接将cftime对象转为字符串后截取前10位的日期部分,再用pandas转datetime即可:
# 先转字符串截取日期,再转datetime对象 df['time'] = pd.to_datetime(df['time'].astype(str).str[:10], format='%Y-%m-%d')
两种方案都可以绕过cftime无法直接转pandas datetime的限制,实测对360天历法的时间序列有效。
内容的提问来源于stack exchange,提问作者phytofan
相关产品推荐
相关产品推荐

