如何在Pandas中将星期全称转换为缩写形式?
解决Pandas中星期全称转缩写的问题
你直接用m.DOW.strftime("%a")失败的原因是:strftime是datetime对象专属方法,而你的DOW列存储的是字符串类型的星期全称(比如"Monday"),不是datetime类型,所以无法直接调用该方法。下面提供几种可行的解决方案:
方法一:先转datetime类型再提取缩写
利用pd.to_datetime将星期全称字符串解析为datetime对象,再通过dt.strftime('%a')获取缩写:
import pandas as pd # 将字符串转为datetime,%A对应星期全称格式 m['DOW'] = pd.to_datetime(m['DOW'], format='%A').dt.strftime('%a')
如果列中存在非标准星期名称(拼写错误、大小写不一致),可以添加errors='coerce'参数将异常值转为NaN,后续再处理:
m['DOW'] = pd.to_datetime(m['DOW'], format='%A', errors='coerce').dt.strftime('%a')
方法二:手动映射字典替换(高效直观)
直接创建星期全称到缩写的映射字典,用map方法批量替换,适合数据量较大的场景:
dow_full_to_abbr = { 'Monday': 'Mon', 'Tuesday': 'Tue', 'Wednesday': 'Wed', 'Thursday': 'Thu', 'Friday': 'Fri', 'Saturday': 'Sat', 'Sunday': 'Sun' } m['DOW'] = m['DOW'].map(dow_full_to_abbr)
方法三:借助calendar模块自动生成映射
无需手动编写字典,用Python内置的calendar模块自动生成全称与缩写的对应关系:
import pandas as pd import calendar # 生成星期全称到缩写的映射字典 dow_map = dict(zip(calendar.day_name, calendar.day_abbr)) m['DOW'] = m['DOW'].map(dow_map)
额外注意事项
如果你的DOW列字符串存在大小写不一致的情况(比如"monday"、"MONDAY"),可以先统一标准化字符串格式再映射:
# 先将字符串转为首字母大写、其余小写的格式 m['DOW'] = m['DOW'].str.capitalize().map(dow_map)
内容的提问来源于stack exchange,提问作者ScareCrowYo
相关产品推荐
相关产品推荐

