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

网页爬取CSV文件的日期时间格式化异常排查与解决咨询

问题分析与解决方法

异常原因

  1. Pandas的pd.to_datetime()在未指定格式时会自动推断日期规则,当遇到01/08/22这种同时符合dd/mm/yy和mm/dd/yy的歧义格式时,会默认倾向美式日期规则(mm/dd/yy)解析,导致日、月颠倒。
  2. 当日期中的日部分大于12时(如13/08/22),由于月份不能超过12,Pandas只能切换到dd/mm/yy规则解析,这就造成了解析规则前后不一致的现象。
  3. 你提到异常出现在从大CSV筛选到目标CSV的过程中,大概率是筛选或写入目标CSV时,没有严格保留原始日期字符串的格式规范,进一步加重了解析的歧义性。

后续避免方法

  • 强制指定日期格式:永远不要依赖自动推断,在读取CSV或解析日期时,显式声明日期格式字符串,彻底消除歧义。
  • 规范CSV读写流程:在筛选、导出CSV的过程中,确保日期字符串的格式完全一致,避免中间步骤对日期字符串进行无意义的修改。

数据修正与图表绘制

方法1:从原始大CSV重新读取(优先推荐)

如果还保留着未筛选的原始大CSV,直接在读取时指定日期格式解析:

import pandas as pd
# 按dd/mm/yy HH:MM格式解析日期列
data = pd.read_csv('原始数据.csv', parse_dates=['date/time'], date_format='%d/%m/%y %H:%M')

解析完成后即可直接用Pandas绘制时间序列图表。

方法2:修正已筛选的目标CSV数据

如果只有筛选后的目标CSV,先将日期列转为字符串,再指定格式重新解析:

import pandas as pd
data = pd.read_csv('筛选后数据.csv')
# 确保日期列是字符串类型,截取掉AM/PM部分后指定格式解析
data['date/time'] = pd.to_datetime(data['date/time'].astype(str).str[:14], format='%d/%m/%y %H:%M')

方法3:修复已解析错误的日期数据

如果已经有解析错误的DataFrame,可以通过判断月份是否合法来修正:

def correct_date(dt):
    # 若解析后的月份大于12,说明是日和月颠倒了
    if dt.month > 12:
        return dt.replace(month=dt.day, day=dt.month)
    return dt

data['date/time'] = data['date/time'].apply(correct_date)

修正完成后,将date/time列设置为索引,即可正常绘制时间序列图表:

data.set_index('date/time', inplace=True)
# 绘制利率时间序列图
data['利率'].plot(figsize=(12,6))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:45:28