Pandas按日期对DataFrame排序时sort_values结果不符合预期如何解决
问题原因
你的date列当前为字符串类型,sort_values默认会按照字符的字典序排序,而非实际日期的先后逻辑,才会出现排序不符合预期的问题。比如示例中的12/12/2020字符串会被判定为小于14/11/2020,最终把12月的日期排到11月前面。
解决方法
- 先将
date列转换为pandas datetime类型,注意你的日期格式为日/月/年,需要指定dayfirst=True避免pandas识别错位:
import pandas as pd po_dataset['date'] = pd.to_datetime(po_dataset['date'], dayfirst=True)
- 再执行排序操作即可得到从旧到新的正确结果:
po_dataset = po_dataset.sort_values('date', ascending=True)
如果不想修改原date列的字符串格式,也可以在排序时临时转换日期格式,写法如下:
po_dataset = po_dataset.sort_values(by='date', key=lambda x: pd.to_datetime(x, dayfirst=True), ascending=True)
排序结果验证
转换后示例数据的正确排序结果如下:
Date 14/11/2020 28/11/2020 12/12/2020
内容的提问来源于stack exchange,提问作者aza
相关产品推荐
相关产品推荐

