如何使用pandas将时分字符串转为无默认年份的datetime并完成排序?
首先明确:Python标准库datetime类型、pandas的datetime64类型本身的结构就要求必须包含年、月、日信息,不存在仅保留时分的datetime格式对象,你可以根据使用场景选择以下两种常用实现方案:
方案1:获取可排序、可比较的时分时间类型
直接使用datetime.time类型即可,该类型本身支持大小比较和排序,完全满足你构建字典、时间匹配的需求:
from datetime import datetime # 从你的时分字符串列表转换为time类型后排序 sorted_time_list = sorted([datetime.strptime(t_str, "%H:%M").time() for t_str in lista])
输出结果示例:
[datetime.time(1, 0), datetime.time(5, 45), datetime.time(7, 15), datetime.time(11, 30), ..., datetime.time(21, 0)]
方案2:获取有序的时分字符串
%H:%M格式的24小时制固定长度字符串,天然字典序和时间顺序完全一致,不需要转时间类型直接排序即可:
sorted_time_str = sorted(lista)
输出结果示例:
['01:00', '05:45', '07:15', '11:30', '15:30', '17:00', '18:30', '19:00', '19:15', '21:00']
优化建议
你原代码中用set去重会打乱原有顺序,其实可以直接从原DataFrame索引一步得到有序去重的时分结果,效率更高:
sorted_time = perfis.index.strftime('%H:%M').drop_duplicates().sort_values().tolist()
内容的提问来源于stack exchange,提问作者Marlon Teixeira
相关产品推荐
相关产品推荐

