Pandas中修正CSV日期列年份错误解决OutOfBoundsDatetime问题
修正CSV中错误日期的解决方案
问题根源
你的代码未生效,是因为Pandas读取CSV时可能自动尝试将ddate列解析为datetime类型,此时错误日期3021-06-30已触发越界错误,replace操作根本没机会执行。
正确处理步骤
1. 以字符串格式读取CSV
先避免自动解析日期,确保数据以字符串形式加载:
import pandas as pd # 指定ddate列为字符串类型,防止自动解析出错 df = pd.read_csv("your_file.csv", dtype={"ddate": str})
2. 替换错误日期
- 单个错误日期直接替换:
df["ddate"] = df["ddate"].replace("3021-06-30", "2021-06-30")
- 批量处理同类错误(比如所有年份写成
30xx的都修正为20xx),用正则更高效:
df["ddate"] = df["ddate"].str.replace(r"^30(\d{2})-", r"20\1-", regex=True)
3. 转换为datetime类型
替换完成后,再将列转为datetime类型:
df["ddate"] = pd.to_datetime(df["ddate"])
备选方案:读取时直接处理错误
如果不想拆分步骤,也可以在读取时自定义日期解析函数:
def fix_date(date_str): # 识别并修正年份错误 if date_str.startswith("30"): return "20" + date_str[2:] return date_str # 读取时直接解析并修正日期 df = pd.read_csv("your_file.csv", parse_dates=["ddate"], date_parser=lambda x: pd.to_datetime(fix_date(x)))
内容的提问来源于stack exchange,提问作者TimB
相关产品推荐
相关产品推荐

