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

Python:如何高效将DataFrame中数字月份转为文本月份?

高效替换DataFrame中数字月份为英文名称的方法

当然有更高效的实现方式!你当前逐个使用loc替换的方法虽然可行,但代码冗余且不易维护,这里给你推荐几种更简洁优雅的方案:

方案1:使用映射字典 + map()/replace()

这是最直观且易维护的方式,先创建数字到月份名的映射字典,再通过一次调用完成替换:

# 定义数字月份到英文名称的映射字典
month_mapping = {
    1.0: 'January',
    2.0: 'February',
    3.0: 'March',
    4.0: 'April',
    5.0: 'May',
    6.0: 'June',
    7.0: 'July',
    8.0: 'August',
    9.0: 'September',
    10.0: 'October',
    11.0: 'November',
    12.0: 'December'
}

# 方法A:使用map()完成映射
cntryPerMonth['Month'] = cntryPerMonth['Month'].map(month_mapping)

# 方法B:使用replace()完成替换
cntryPerMonth['Month'] = cntryPerMonth['Month'].replace(month_mapping)

两者的区别:

  • map()会将字典中不存在的键转换为NaN
  • replace()会保留字典中不存在的原始值

你可以根据自己的数据情况(是否存在无效月份值)选择合适的方法。

方案2:利用datetime模块自动生成月份名

如果你不想手动维护映射字典,可以借助Python的datetime模块,通过日期格式化直接获取月份名称:

import datetime

# 先将浮点数类型的月份转为整数,再生成对应月份名
cntryPerMonth['Month'] = cntryPerMonth['Month'].astype(int).apply(
    lambda x: datetime.date(1900, x, 1).strftime('%B')
)

说明:

  • astype(int)是因为你的月份是浮点数(如1.0),需要先转为整数才能传入datetime.date
  • strftime('%B')会返回完整的英文月份名称(如January),如果需要缩写可以用'%b'(如Jan)
  • 注意:如果你的Month列存在1-12之外的数值,这个方法会抛出错误,所以要确保数据的有效性。

这两种方案都能帮你用几行代码完成原本12行的工作,代码更简洁也更易维护~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:37:34