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

Pandas日期格式转换及分组排序异常问题解决求助

解决Pandas日期格式转换与分组排序问题

针对你遇到的两个问题,我来一步步拆解解决方案:

一、将"20 March"转换为"20/03/2020"格式

你之前尝试strftime和to_datetime没成功,大概率是因为没先把字符串解析为datetime类型——strftime只能作用于datetime对象,不能直接处理字符串。正确步骤如下:

  1. 解析字符串为datetime类型
    由于你的日期只有日和月,需要指定年份(比如固定为2020),同时用format参数匹配日期格式:

    import pandas as pd
    
    # 假设你的数据框是df,日期列名为date_str
    df['date_datetime'] = pd.to_datetime(
        df['date_str'],
        format="%d %B",  # %B匹配全称月份(如March),缩写月份用%b
        year=2020,       # 固定年份为2020,不指定则默认用当前年份
        errors='coerce'  # 把无法解析的日期转为NaT,方便后续排查异常
    )
    
  2. 转换为目标字符串格式
    解析成datetime后,就可以用dt.strftime生成你想要的格式:

    df['formatted_date'] = df['date_datetime'].dt.strftime("%d/%m/%Y")
    

    这里的格式符含义:

    • %d:两位数字的日(如20)
    • %m:两位数字的月(如03)
    • %Y:四位数字的年(如2020)

二、解决分组时日期按数字乱序的问题

出现这种排序问题的核心原因是:你的日期列还是字符串类型,字符串排序是按字符字典序来的(比如"1 January"会排在"2 January"前面,但"10 January"会排在"2 January"后面,因为'1'的ASCII码比'2'小)。

解决方法很简单:

  • 确保分组时使用datetime类型的日期列,而不是字符串列。当日期是datetime类型时,Pandas会自动按照真实的时间顺序排序。

示例代码:

# 按datetime类型的日期列分组(比如上面的date_datetime)
grouped_df = df.groupby('date_datetime').agg(your_aggregation_function)

# 如果分组后索引未自动排序,手动按时间顺序整理
grouped_df = grouped_df.sort_index()

这样分组后的结果就会严格按照日期先后顺序排列,不会出现乱序的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:27:33