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()会将字典中不存在的键转换为NaNreplace()会保留字典中不存在的原始值
你可以根据自己的数据情况(是否存在无效月份值)选择合适的方法。
方案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.datestrftime('%B')会返回完整的英文月份名称(如January),如果需要缩写可以用'%b'(如Jan)- 注意:如果你的
Month列存在1-12之外的数值,这个方法会抛出错误,所以要确保数据的有效性。
这两种方案都能帮你用几行代码完成原本12行的工作,代码更简洁也更易维护~
内容的提问来源于stack exchange,提问作者user10325073
相关产品推荐
相关产品推荐

