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

DataFrame sort_values在混存datetime与date的列上排序失败的解决方法

解决方法

核心思路

借助pandas.DataFrame.sort_values的key参数(pandas 1.1.0及以上版本支持),在排序阶段动态统一日期类型——将datetime.date对象转换为指定时间点的datetime.datetime对象,无需修改原数据的底层结构,性能开销远小于全量转换整列数据。

代码实现

基础版:将date转为当天0点的datetime

from datetime import datetime, date

def unify_date_type(dt, end_of_day=False):
    # 仅对纯date类型做转换,datetime类型直接返回
    if isinstance(dt, date) and not isinstance(dt, datetime):
        if end_of_day:
            # 转换为当天23:59:59.999
            return datetime.combine(dt, datetime.max.time())
        else:
            # 转换为当天00:00:00
            return datetime.combine(dt, datetime.min.time())
    return dt

# 执行排序
sorted_data = data.sort_values(
    by='date',
    ascending=False,
    na_position='last',
    key=lambda col: col.apply(unify_date_type)
)

# 遍历输出open列
for d in sorted_data['open']:
    print(d)

配置版:转为当天结束时间

只需在调用转换函数时传入end_of_day=True:

sorted_data = data.sort_values(
    by='date',
    ascending=False,
    na_position='last',
    key=lambda col: col.apply(lambda x: unify_date_type(x, end_of_day=True))
)

优势说明

  • 无需修改原DataFrame的列结构,仅在排序过程中临时生成转换后的序列,排序完成后自动回收,内存占用低。
  • 针对混合类型的场景精准处理,只转换需要调整的date对象,避免无意义的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:10