如何解决Pandas读取CSV时的DateTime解析警告及日期匹配问题?
解决pandas日期解析警告与日期匹配问题
一、消除日期解析警告
你的警告源于CSV中DateTime列格式是DD-MM-YYYY,但设置dayfirst=False(默认值)会让pandas按MM-DD-YYYY解析日期,导致解析逻辑混乱。有两种可靠解决方式:
方式1:明确设置dayfirst=True
直接告诉pandas日期格式是日在前:
df = pd.read_csv(filename, parse_dates=['DateTime'], dayfirst=True)
方式2:指定精确日期格式(推荐)
避免任何歧义,直接指定解析格式(pandas 1.3.0及以上版本可直接用date_format参数):
# 方法A:自定义解析函数 from datetime import datetime def parse_date(date_str): return datetime.strptime(date_str, '%d-%m-%Y') df = pd.read_csv(filename, parse_dates=['DateTime'], date_parser=parse_date) # 方法B:直接用date_format参数(pandas 1.3.0+) df = pd.read_csv(filename, parse_dates=['DateTime'], date_format='%d-%m-%Y')
二、修复日期匹配报错
你之前将DateTime列转成字符串格式后匹配current_date,容易因格式不一致(比如前导零、日期分隔符差异)导致匹配失败。正确做法是保留DateTime的datetime类型,通过日期对象匹配:
修改后的完整代码示例
from datetime import datetime import pandas as pd # 1. 正确读取并解析日期 df = pd.read_csv(filename, parse_dates=['DateTime'], date_format='%d-%m-%Y') # 2. 将current_date转为date对象(假设current_date是"DD-MM-YYYY"格式的字符串) current_date_obj = datetime.strptime(current_date, '%d-%m-%Y').date() # 3. 匹配日期并获取数据 # 筛选出日期匹配的行 matching_rows = df[df['DateTime'].dt.date == current_date_obj] # 取第一行目标列数据(避免用iloc[index]的复杂写法,更直观) eod_quote = matching_rows.iloc[0][f"{ticker}{quote_asset}"]
关键说明
- 保留
DateTime为datetime类型,避免字符串匹配的格式问题; - 用
dt.date提取日期部分,和current_date转成的date对象直接对比,匹配逻辑更可靠; - 若
current_date本身已是date对象,可跳过转格式步骤直接对比。
内容的提问来源于stack exchange,提问作者Matt - Block-Farms.io
相关产品推荐
相关产品推荐

