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

如何在Pandas DataFrame中将多格式日期转换为统一日期格式

解决Pandas中多格式日期批量转换的问题

首先,咱们先拆解下你遇到的错误:AttributeError: 'str' object has no attribute 'strftime',这是因为你直接对字符串类型的日期调用了strftime方法——这个方法是datetime对象专属的,字符串本身根本没有这个属性,自然会报错。另外,你的代码还没处理每个单元格里多个日期用逗号分隔的情况,也没考虑到那个字符串形式的'NaN',咱们一步步来修正。

解决方案步骤

  1. 把每个单元格的字符串按逗号分割成单独的日期片段;
  2. 对每个日期片段,用dateutil.parser.parse解析成datetime对象,再转成YYYY-MM-DD的统一格式;
  3. 处理空值/无效值(比如字符串'NaN');
  4. 把处理后的日期片段重新拼接成字符串,存入新列。

完整可运行代码

import pandas as pd
import dateutil.parser

# 初始化数据,把字符串'NaN'替换成真正的pd.NA,更符合Pandas规范
data = {'Date':['March 13, 2020, March 13, 2020', 
                '3.9.2021, 3.9.2021, 03.09.2021, 3. September 2021', 
                pd.NA, 
                'May 20, 2022, May 21, 2022']}

# 创建DataFrame
df = pd.DataFrame(data)

# 定义批量格式化日期的函数
def format_multiple_dates(date_str):
    # 处理缺失值情况
    if pd.isna(date_str):
        return pd.NA
    
    # 分割日期字符串,去掉每个日期前后的空格
    individual_dates = [d.strip() for d in date_str.split(',')]
    formatted_list = []
    
    for single_date in individual_dates:
        try:
            # 解析任意格式的日期字符串为datetime对象
            # 如果需要按"月.日.年"解析,可添加参数dayfirst=False
            parsed_dt = dateutil.parser.parse(single_date)
            # 转成YYYY-MM-DD格式
            formatted_dt = parsed_dt.strftime('%Y-%m-%d')
            formatted_list.append(formatted_dt)
        except Exception as e:
            # 如果遇到无法解析的日期,保留原字符串(可选:也可以返回pd.NA)
            formatted_list.append(single_date)
    
    # 把格式化后的日期拼接回字符串
    return ', '.join(formatted_list)

# 应用函数到Date列,生成新列
df["DateFormatted"] = df["Date"].apply(format_multiple_dates)

# 查看结果
print(df)

运行结果说明

执行后你会得到和期望一致的输出:

序号DateDateFormatted
0March 13, 2020, March 13, 20202020-03-13, 2020-03-13
13.9.2021, 3.9.2021, 03.09.2021, 3. September 20212021-09-03, 2021-09-03, 2021-09-03, 2021-09-03
2NaNNaN
3May 20, 2022, May 21, 20222022-05-20, 2022-05-21

(注:dateutil.parser默认把.分隔的日期按日.月.年解析,如果你需要按月.日.年处理,修改解析代码为parsed_dt = dateutil.parser.parse(single_date, dayfirst=False)即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:47:27