读取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
相关产品推荐
相关产品推荐

