You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas加载CSV至数据库遇日期格式匹配错误求助

解决Pandas加载CSV到数据库时的日期格式不匹配问题

看起来你遇到了一个典型的日期格式解析冲突问题,结合你描述的细节,咱们一步步来定位和解决:

核心问题分析

错误提示 ValueError: time data '2018-01-10 00:00:00.000' does not match format '%d.%m.%y' 暴露了两个关键矛盾:

  1. 你指定的日期格式是点分隔的日.月.年(%d.%m.%y),但实际CSV里的日期是横杠分隔的日-月-年(10-01-18),格式符号完全不匹配;
  2. 错误信息里出现了带毫秒的完整日期字符串,大概率是Pandas尝试自动解析日期失败后,生成了不符合预期的中间格式。

分步解决方案

1. 先确保读取CSV时用对日期格式

首先要和CSV里的日期格式严格对应,你的日期是10-01-18,对应的格式字符串是%d-%m-%y,读取时明确指定:

import pandas as pd

# 方式一:直接指定date_format和parse_dates
df = pd.read_csv(
    "your_file.csv",
    encoding="utf-8-sig",  # 解决可能存在的UTF-8 BOM问题
    parse_dates=["你的日期列名"],
    date_format="%d-%m-%y",
    dayfirst=True  # 确保解析时把日放在前面
)

2. 自定义日期解析函数(更灵活)

如果自动解析还是有问题,用自定义函数强制指定解析规则:

def custom_date_parser(date_str):
    # 严格按照CSV里的格式解析
    return pd.to_datetime(date_str, format="%d-%m-%y", dayfirst=True)

df = pd.read_csv(
    "your_file.csv",
    encoding="utf-8-sig",
    parse_dates=["你的日期列名"],
    date_parser=custom_date_parser
)

3. 先排查原始数据格式

如果还是报错,先不解析日期,把日期列读成字符串,确认原始数据的真实格式:

# 先读取为字符串,避免自动解析干扰
df = pd.read_csv(
    "your_file.csv",
    encoding="utf-8-sig",
    dtype={"你的日期列名": str}
)

# 打印前几行查看真实格式
print(df["你的日期列名"].head())

确认没有隐藏字符或格式不一致的行后,再手动转换日期:

df["你的日期列名"] = pd.to_datetime(
    df["你的日期列名"],
    format="%d-%m-%y",
    dayfirst=True,
    errors="coerce"  # 把解析失败的行设为NaT,方便排查
)

4. 写入数据库时的格式适配

如果读取没问题,但写入数据库时出错,需要确保Pandas生成的日期格式和数据库字段的类型匹配。比如数据库字段是DATETIME,可以在写入前把日期列转换为标准格式:

df["你的日期列名"] = df["你的日期列名"].dt.strftime("%Y-%m-%d %H:%M:%S")
# 或者直接用Pandas的to_sql方法,指定dtype参数适配数据库类型
from sqlalchemy import DateTime

df.to_sql(
    "你的表名",
    con=你的数据库连接,
    dtype={"你的日期列名": DateTime()}
)

额外提醒

  • 编码问题:虽然你已经转成UTF-8,但有些文本编辑器保存时会加BOM头,用encoding="utf-8-sig"读取可以避免乱码;
  • 日期格式符号:一定要区分%y(两位数年份)和%Y(四位数年份),你的CSV里是18,所以用%y是对的。

内容的提问来源于stack exchange,提问作者OAK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:17:54