Pandas读取CSV时日期月日识别颠倒该如何解决?
Pandas CSV日期列月日颠倒问题解决方案
核心原因
你之前解析失败的主要原因有两个:
- 调用
pd.to_datetime时指定的格式%m/%d/%Y和实际CSV存储的yyyy-mm-dd格式不匹配,格式规则、分隔符完全不符,导致解析逻辑混乱 - 仅使用
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
相关产品推荐
相关产品推荐

