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

读取CSV文件时触发ValueError错误,请求技术排查与解决

解决CSV读取时的datetime.strptime ValueError问题

从你给出的报错追踪和代码片段来看,问题主要出在两个核心点上,我帮你一步步拆解解决:

1. 错误遍历了表头而非数据行

你代码里写的for row in header:是关键问题——header是CSV的表头行(比如["Date", "Open", "High", ...]),这时候循环里的row会是单个表头字段名(比如第一次循环row就是字符串"Date"),你再去取row[0]就变成了字符"D",用这个去匹配%m/%d/%Y的日期格式,必然会触发ValueError。

正确的做法是先读取表头并跳过,再遍历真正的数据行,用csv.reader的示例代码如下:

import csv
from datetime import datetime

with open('你的文件路径.csv', 'r') as f:
    reader = csv.reader(f)
    header = next(reader)  # 读取表头,直接跳过这一行
    for row in reader:  # 这里遍历的才是包含日期、价格的真实数据行
        date = datetime.strptime(row[0], '%m/%d/%Y')
        open_price = float(row[1])
        high = float(row[2])
        # 后续的业务处理逻辑

2. 日期字符串与格式串不匹配

如果确认已经在遍历数据行,但还是报错,那就是你的日期字符串实际格式和%m/%d/%Y不匹配。举几个常见的情况:

  • 如果日期是YYYY-MM-DD格式,格式串要改成%Y-%m-%d
  • 如果日期是日/月/年的顺序(比如05/10/2023代表10月5日),格式串要换成%d/%m/%Y
  • 如果日期带时间部分(比如10/05/2023 14:30),需要把时间部分也加入格式串:%m/%d/%Y %H:%M

你可以先打印出报错的日期字符串,确认它的真实格式:

print("当前待解析的日期内容:", row[0])

再对照Python的日期格式代码调整格式串,常用的格式代码包括:

  • %Y:4位年份(如2023)
  • %m:2位月份(01-12)
  • %d:2位日期(01-31)
  • %H:24小时制小时(00-23)
  • %M:分钟(00-59)

额外省心方案:用pandas自动处理

如果你的数据量不小,或者不想手动处理类型转换,用pandas会更高效,它能自动识别日期和数值类型:

import pandas as pd

df = pd.read_csv('你的文件路径.csv', parse_dates=['Date'])
# 此时df['Date']已经是datetime类型,Open、High等列也自动转为float类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:53