已转为字符串,Dask DataFrame仍抛出OutOfBoundsDatetime错误求助
解决Dask读取SQL表时的OutOfBoundsDatetime异常
问题原因
numpy的datetime64[ns]类型时间范围上限为2262-04-11,而你的表中存在9999-12-31 23:59:59这类超出范围的日期。Dask在compute()阶段会默认将SQL日期列解析为datetime64[ns],你后续转字符串的操作属于延迟计算步骤,无法覆盖前期的解析逻辑,因此依然触发报错。
解决方案
方案1:读取时直接指定列类型为字符串
在read_sql_table中通过dtype参数指定目标日期列以字符串类型读取,从根源避免日期解析:
ddf = read_sql_table( table_name='TABLE_NAME', con=conn, index_col='index', dtype={'transaction_end_date': str} ) ddf.compute()
方案2:通过SQL查询转换日期为字符串
直接在SQL语句中将日期列转为字符串后读取,绕过Dask的自动解析逻辑:
query = "SELECT index, CAST(transaction_end_date AS VARCHAR) AS transaction_end_date FROM TABLE_NAME" ddf = read_sql_query(query, con=conn, index_col='index') ddf.compute()
方案3:用object类型存储(需后续日期操作时)
如果需要保留日期操作能力,可指定列类型为object,存储原始日期对象(需确保SQL驱动支持返回宽范围日期):
ddf = read_sql_table( table_name='TABLE_NAME', con=conn, index_col='index', dtype={'transaction_end_date': object} ) # 后续可手动转换为pandas支持宽范围的日期类型(如DatetimeTZDtype)
内容的提问来源于stack exchange,提问作者rams
相关产品推荐
相关产品推荐

