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

如何给Pandas DataFrame添加列:将缩写星期转换为星期编号

问题

我想给一个包含星期缩写(如'MON'、'TUE'、'WED')的Pandas DataFrame添加星期编号列,试了用pd.to_datetime配合format='%w',但这个方法识别不了'MON'这类缩写值。

示例数据:

import pandas as pd

s = pd.DataFrame(data={'ord_day': ['TUE', 'MON','TUE','WED','FRI']})
s

输出:

ord_day
0   TUE
1   MON
2   TUE
3   WED
4   FRI

错误尝试代码:

s['weekday'] = pd.to_datetime(s['ord_day'],format ='%w')
解决办法

方法1:直接用字典映射(最省心)

星期缩写是固定的,直接做个映射字典对应到你要的编号就行,比如把周一设为0,周二1,以此类推:

weekday_map = {'MON': 0, 'TUE': 1, 'WED': 2, 'THU': 3, 'FRI': 4, 'SAT': 5, 'SUN': 6}
s['weekday'] = s['ord_day'].map(weekday_map)

运行后结果:

ord_day  weekday
0   TUE          1
1   MON          0
2   TUE          1
3   WED          2
4   FRI          4

方法2:用datetime解析缩写

如果想用日期解析的方式,可以借助datetime模块的strptime识别英文星期缩写:

from datetime import datetime

# weekday()返回周一=0,周日=6;要是想周日=0,用isoweekday()后减1
s['weekday'] = s['ord_day'].apply(lambda x: datetime.strptime(x, '%a').weekday())

注意:这个方法要求系统环境支持英文星期解析,若系统语言为中文,可能需要先调整环境变量。

方法3:用分类数据指定顺序

如果之后需要按星期顺序排序(而非字母顺序),可以把ord_day设为分类类型,再取编码:

week_order = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
s['ord_day'] = pd.Categorical(s['ord_day'], categories=week_order, ordered=True)
s['weekday'] = s['ord_day'].cat.codes

这样后续对ord_day排序时,会按照周一到周日的逻辑顺序排列,而非字母排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:15:20