使用Pandas读取Excel数据时定位报错的行和列
定位Pandas读取ODF文件时日期列的错误行和列
这个check_dts_bounds错误通常是因为某行的日期值超出了NumPy/Pandas支持的datetime范围(大概是1677年9月21日到2262年4月11日),或者日期格式有严重问题。以下是具体定位方法:
方法1:先全量读取为字符串,再批量检查日期列
先关闭自动日期解析,把所有数据读成字符串,避免加载时直接报错:
webLinksPanda = pd.read_excel( '/home/xyz/Documents/worksheet.ods', sheet_name='VidRecInv-LargeData', engine='odf', dtype=str # 强制所有列按字符串读取 )
假设你的日期列名为date_col1和date_col2,用pd.to_datetime的errors='coerce'参数批量转换,找出转换失败的行:
date_cols = ['date_col1', 'date_col2'] # 替换成你的日期列名 for col in date_cols: # 尝试转换日期,无效值转为NaT converted_dates = pd.to_datetime(webLinksPanda[col], errors='coerce') # 筛选出转换失败的行 invalid_rows = webLinksPanda[converted_dates.isna()] if not invalid_rows.empty: print(f"⚠️ 列 {col} 中存在无效日期的行:") print(f"行号(索引):{invalid_rows.index.tolist()}") print(f"对应错误值:{webLinksPanda.loc[invalid_rows.index, col].tolist()}")
方法2:逐行逐列捕获转换异常
如果批量检查没找到(比如某些值能通过coerce但触发范围报错),可以逐行尝试转换并捕获异常:
date_cols = ['date_col1', 'date_col2'] # 替换成你的日期列名 for idx, row in webLinksPanda.iterrows(): for col in date_cols: raw_val = row[col] try: # 尝试转换为datetime,触发范围检查 pd.to_datetime(raw_val) except Exception as e: print(f"❌ 行 {idx+1}(索引{idx}),列 {col} 的值「{raw_val}」转换失败:") print(f"错误信息:{str(e)}")
额外提示
- 重点检查那些看起来像极端日期的值(比如0001年、9999年),或者格式混乱的字符串(比如包含非日期字符的内容)。
- 如果找到错误行,直接修改ODF文件里的对应值,或者读取时用
parse_dates指定日期列并配合date_parser自定义解析逻辑,跳过无效值。
内容的提问来源于stack exchange,提问作者Markdd
相关产品推荐
相关产品推荐

