如何将pandas字符串索引转为日期格式实现DataFrame时间排序
Pandas 按「月份缩写+年份」字符串索引排序实现方案
问题描述
待处理的DataFrame对象df特征如下:
- 索引为字符串类型,值格式为「三位月份英文缩写+空格+四位年份」,例如
Jan 2021、Feb 2022 - 数据未按时间先后顺序排列,原始数据样例:
0 Jan 2021 0.852144 Jan 2022 0.442388 Feb 2021 0.406946 Feb 2022 0.296960 : : Nov 2021 0.829171 Nov 2022 0.601725 Dec 2021 0.214810 Dec 2022 0.673403
- 目标效果:按时间从早到晚排序,从2021年1月起逐月递增,目标样例:
0 Jan 2021 0.686585 Feb 2021 0.214810 Mar 2021 0.852144 Apr 2021 0.920720 : : Sep 2022 0.770413 Oct 2022 0.751213 Nov 2022 0.601725 Dec 2022 0.924836
实现步骤
核心思路是先把字符串格式的时间索引转为pandas可识别的datetime类型,再按索引排序即可,核心代码仅2行:
import pandas as pd # 将字符串索引转为datetime类型,指定解析格式避免报错、提升解析速度 df.index = pd.to_datetime(df.index, format="%b %Y") # 按时间索引升序排序 df = df.sort_index()
可选配置
如果你希望排序后索引仍然显示为Jan 2021的字符串格式,而不是datetime默认的2021-01-01样式,可以在排序完成后加一行代码转回原格式:
df.index = df.index.strftime("%b %Y")
参数说明
format="%b %Y":%b匹配三位英文月份缩写(Jan、Feb等),%Y匹配四位数字年份,明确指定格式比自动解析速度更快,也能避免格式识别错误sort_index()默认按升序排列,完全满足从早到晚的时间排序需求,需要倒序排列时传入参数ascending=False即可
内容的提问来源于stack exchange,提问作者Stacey
相关产品推荐
相关产品推荐

