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

如何将pandas中提取的mm/yy格式内容转为可排序的日期类型而非object

strftime方法生成的是字符串类型,因此M/Y列会被识别为object类型,字符串默认按字典序排序,会出现12/08排在01/09前面的错误,不符合时间排序逻辑。

方案1:使用月份Period类型(推荐)

pandas的Period类型专门用于处理周期时间,既保留时间属性可正确排序,也可按需格式化为01/09的显示效果:

# 先将Order Date转为标准日期类型
data['Order Date'] = pd.to_datetime(data['Order Date'])
# 生成月份周期列,类型为period[M],天然支持时间顺序排序
data['M/Y'] = data['Order Date'].dt.to_period('M')

绘图时如果需要x轴显示为%m/%y格式,仅需设置刻度格式化器即可,无需修改源数据:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

ax = data.sort_values('M/Y').plot(x='M/Y', y='你的数值列', kind='line')
# 设置x轴显示格式为月/两位年
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%y'))
plt.show()
方案2:保留字符串显示列,搭配辅助排序列

如果必须要M/Y列为01/09格式的字符串,可以额外增加一个日期类型的辅助列用于排序:

data['Order Date'] = pd.to_datetime(data['Order Date'])
# 辅助排序列:取对应月份的第一天,日期类型可正确排序
data['sort_month'] = data['Order Date'].dt.to_period('M').dt.to_timestamp()
# 生成显示用的字符串格式月份
data['M/Y'] = data['Order Date'].dt.strftime('%m/%y')

# 排序时使用辅助列,绘图时用M/Y作为x轴即可
data_sorted = data.sort_values('sort_month')
data_sorted.plot(x='M/Y', y='你的数值列', kind='line')

另外你原代码中的apply调用是不必要的,直接使用dt访问器处理整列的效率远高于逐行apply。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:54:03