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

Pandas读取CSV时日期月日识别颠倒该如何解决?

Pandas CSV日期列月日颠倒问题解决方案

核心原因

你之前解析失败的主要原因有两个:

  1. 调用pd.to_datetime时指定的格式%m/%d/%Y和实际CSV存储的yyyy-mm-dd格式不匹配,格式规则、分隔符完全不符,导致解析逻辑混乱
  2. 仅使用parse_dates参数未指定明确格式时,Pandas会基于系统区域设置自动推断日期,大概率会将日月顺序识别颠倒

修复方案

方案1:读取CSV时直接正确解析(推荐)

在pd.read_csv中同时配置parse_dates和date_format参数,明确指定日期格式,从导入环节就避免错误:

import pandas as pd

try:
    collections_data = pd.read_csv(
        './monthly_collections.csv',
        parse_dates=['Collections Month'], # 填写你实际的日期列名
        date_format='%Y-%m-%d' # 完全匹配CSV中yyyy-mm-dd的日期格式
    )
    print("Collections Data imported successfully.")
except Exception as e:
    print(f"Error importing Collections Data: {e}")

方案2:已导入数据的事后修复

如果数据已经被读取为字符串/错误的datetime格式,可以针对性修复:

场景A:日期列当前为字符串格式

collections_data['Collections Month'] = pd.to_datetime(
    collections_data['Collections Month'],
    format='%Y-%m-%d'
)

场景B:日期列已经被错误解析为datetime格式

此时错误日期的month字段实际是原始数据的日,day字段实际是原始数据的月,直接重新构造日期即可:

collections_data['Collections Month'] = collections_data['Collections Month'].apply(
    lambda x: pd.Timestamp(year=x.year, month=x.day, day=1)
)

验证方法

修复完成后执行以下代码验证月份是否正确:

# 输出所有唯一月份,正常应该返回1-12的整数,不会全为1
print(collections_data['Collections Month'].dt.month.unique())

注意事项

  • 所有日期解析操作必须保证format参数和原始存储格式完全匹配:%Y对应4位年份,%m对应2位月份,%d对应2位日期,分隔符要和原始数据一致
  • 后续跨表关联时,确保两张表的日期列都为datetime类型,避免字符串匹配出现误差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 14:24:08