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

Python pandas用parse_dates解析CSV多列日期仅生效一列如何解决?

问题根因
  1. 参数拼写错误:pandas read_csv 方法中指定解析日期列的参数为parse_dates(复数形式),你代码中传入的parse_date缺少末尾的s,属于无效参数,pandas只会默认识别符合内置规则的日期列,因此仅dateofbirth被转换,其余列未处理。
  2. 日期格式适配问题:你CSV中使用的是月/日/年 12小时制+AM/PM的格式,部分场景下pandas默认解析规则无法匹配,即便参数拼写正确也可能出现解析失败的情况。
通用解决方案(适配多文件、日期列名不固定的场景)

下面的方案不需要提前知道每个CSV的日期列名,可自动识别转换所有符合格式的日期列:

  • 方案1:读入时直接自动解析
    自定义日期解析规则,读入时自动匹配所有符合格式的列:
    import pandas as pd
    
    # 匹配CSV中的日期格式:%m=月份 %d=日期 %Y=4位年份 %I=12小时制小时 %M=分钟 %S=秒 %p=AM/PM标识
    date_parser = lambda x: pd.to_datetime(x, format="%m/%d/%Y %I:%M:%S%p", errors="coerce")
    
    df = pd.read_csv(
        "你的CSV文件路径",
        parse_dates=True, # 自动尝试解析所有疑似日期的列
        date_parser=date_parser
    )
    
  • 方案2:先全量读为字符串再批量转换(兼容性更高)
    如果不同CSV的日期格式存在细微差异,先读为字符串再转换更稳妥,不会在读入阶段报错:
    # 读入时所有列保持字符串格式
    df = pd.read_csv("你的CSV文件路径", dtype=str)
    
    # 遍历所有列尝试转换为日期,转换失败的列保持原内容不变
    for col in df.columns:
        df[col] = pd.to_datetime(df[col], format="%m/%d/%Y %I:%M:%S%p", errors="ignore")
    
  • 批量处理160个CSV的示例代码
    import os
    import pandas as pd
    
    # 存放所有CSV的文件夹路径
    csv_folder = "./your_csv_folder"
    processed_list = []
    
    for filename in os.listdir(csv_folder):
        if not filename.endswith(".csv"):
            continue
        file_path = os.path.join(csv_folder, filename)
        df = pd.read_csv(file_path, dtype=str)
        for col in df.columns:
            df[col] = pd.to_datetime(df[col], format="%m/%d/%Y %I:%M:%S%p", errors="ignore")
        processed_list.append(df)
    
    # 处理完所有文件后可按需单独使用或合并所有DataFrame
    
结果验证

处理完成后执行print(df.dtypes)即可查看所有列的类型,确认日期列是否已转换为datetime64[ns]格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 06:33:01