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

解决Pandas中月份为名称格式的datetime列排序异常问题

解决Pandas日期字符串排序错误的问题

嘿,这个问题我之前也踩过坑!你遇到的排序错误,核心原因是:当你用dt.strftime('%d-%b-%Y')把datetime对象转换成字符串后,Pandas的排序就会按照字符串的字符ASCII顺序来处理,而不是实际的日期逻辑。比如"14-Jan-2019"的第一个字符是'1',比"04-Feb-2019"的'0'ASCII值大,所以字符串排序会把1月14日排在2月4日后面,但实际1月14日早于2月4日,这就导致了错误的顺序。

下面给你两种靠谱的解决方法:

方法一:用Datetime类型列排序(推荐)

最稳妥的方式是保留datetime类型的列来做排序,字符串格式只用来最终展示,步骤如下:

  1. 先把Date Time列转换为datetime类型,存到一个临时列里
  2. 用这个datetime列做排序(这时候会严格按照日期逻辑排序)
  3. 最后再生成你需要的%d-%b-%Y格式的字符串日期列

代码示例:

# 1. 将原始字符串日期转为datetime类型,保留临时列
df['datetime_col'] = pd.to_datetime(df['Date Time'])
# 2. 用datetime列进行升序排序
df.sort_values(by='datetime_col', inplace=True, ascending=True)
# 3. 生成目标格式的日期字符串列
df['Date'] = df['datetime_col'].dt.strftime('%d-%b-%Y')
# 如果不需要临时列,可以最后删除
# df.drop('datetime_col', axis=1, inplace=True)

方法二:用可排序的日期字符串格式

如果你一定要用字符串列来排序,可以先把日期转成%Y-%m-%d(年-月-日)的格式,这种格式的字符串排序顺序和实际日期顺序完全一致,排序完成后再转成你需要的格式:

代码示例:

# 生成用于排序的年-月-日格式字符串
df['sort_date'] = pd.to_datetime(df['Date Time']).dt.strftime('%Y-%m-%d')
# 按这个字符串列排序
df.sort_values(by='sort_date', inplace=True, ascending=True)
# 转成目标日期格式
df['Date'] = pd.to_datetime(df['sort_date']).dt.strftime('%d-%b-%Y')
# 删除临时排序列
df.drop('sort_date', axis=1, inplace=True)

更简洁的写法

如果你不想生成临时列,也可以直接在sort_values里用转换后的datetime对象:

# 直接用pd.to_datetime的结果作为排序依据
df.sort_values(by=pd.to_datetime(df['Date Time']), inplace=True, ascending=True)
# 再生成目标格式的Date列
df['Date'] = pd.to_datetime(df['Date Time']).dt.strftime('%d-%b-%Y')

总的来说,处理日期相关的排序、筛选等操作时,尽量保留datetime类型,字符串格式只用于最终的展示输出,这样就能避免这类排序错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:49