pd.date_range传入下划线分隔日期串报无法转换为Timestamp错误
报错原因
pd.date_range 自动解析日期字符串时,默认支持日期与时间用空格分隔的%Y-%m-%d %H:%M格式,无法直接识别你用下划线分隔日期、时间的%Y-%m-%d_%H:%M格式,因此抛出无法转换为Timestamp的ValueError。
修复方案
方案1:直接传入datetime对象,规避字符串解析(推荐)
这是最稳妥的写法,不需要提前把起止时间转成格式字符串,pd.date_range原生支持datetime类型的起止参数,从根源上避免字符串解析不兼容的问题。
注意你原来的代码里f字符串存在不必要的断行,会触发语法错误,修正后完整代码如下:
from datetime import datetime import pandas as pd beginning_time = datetime(year, month, day, hour, minute) end_time = datetime(year, month, day_end, hour_end, minute) # 直接传datetime对象生成时间序列,不需要提前转字符串 timerange_HRRR = pd.date_range(start=beginning_time, end=end_time, freq='1H') # 生成文件路径时,再按文件名需要的下划线格式批量转字符串 timerange_HRRR_str = timerange_HRRR.strftime("%Y-%m-%d_%H:%M") grib_file_2d_base = f'{wrf_cases_dir}{wrfoutdir}/wrf2d_{domain}_' + timerange_HRRR_str + '.grib2' for fpath in grib_file_2d_base: print(fpath)
方案2:传入字符串时显式指定日期格式
如果业务逻辑要求必须传入字符串形式的起止时间,在调用pd.date_range时通过format参数显式声明你使用的日期格式,和你生成字符串时用的strftime格式保持一致即可:
timerange_HRRR = pd.date_range( start=beginning_time_str, end=end_time_str, freq='1H', format="%Y-%m-%d_%H:%M" )
补充:你之前用空格分隔的日期字符串能正常运行,本质是因为该格式属于pandas默认兼容的通用日期写法,不需要额外声明格式就能自动解析;下划线分隔的写法不属于通用日期格式,必须显式指定格式,或者直接绕开字符串解析步骤。
内容的提问来源于stack exchange,提问作者Wx_Trader
相关产品推荐
相关产品推荐

