如何在Python中将含"1yr 11mon"的列转换为月数?
解决年月字符串转总月数的Python方案
嘿,作为Python新手能想到用正则来处理这个问题,思路完全没问题!我来帮你把这个想法落地,实现一个简单好用的函数,还能直接处理DataFrame里的整列数据。
核心思路
我们需要从字符串里提取出年数和月数:
- 用正则匹配出所有带
yr(年)和mon(月)的数字片段 - 把年数转换成月数(1年=12个月),再加上原有的月数,得到总月数
完整代码实现
首先是核心转换函数,再演示如何处理DataFrame列:
import re import pandas as pd # 如果要处理DataFrame的话需要导入 def convert_to_total_months(period_str): # 正则匹配:捕获数字(\d+)和对应的单位(yr或mon) matches = re.findall(r'(\d+)(yr|mon)', period_str) total_months = 0 for num_str, unit in matches: # 把字符串数字转成整数 num = int(num_str) if unit == 'yr': total_months += num * 12 elif unit == 'mon': total_months += num return total_months # 测试单个字符串 print(convert_to_total_months("1yr 11mon")) # 输出: 23 print(convert_to_total_months("2yr")) # 输出: 24 print(convert_to_total_months("5mon")) # 输出: 5 # 处理DataFrame列的示例 df = pd.DataFrame({'period': ["1yr 11mon", "2yr", "3yr 4mon", "7mon"]}) df['total_months'] = df['period'].apply(convert_to_total_months) print(df)
代码解释
re.findall(r'(\d+)(yr|mon)', period_str):这个正则会把字符串里所有类似1yr、11mon的片段提取出来,返回一个列表,比如"1yr 11mon"会得到[('1', 'yr'), ('11', 'mon')]- 遍历匹配结果时,我们把数字字符串转成整数,根据单位计算对应的月数并累加
- 如果是处理DataFrame,用
apply方法就能快速把函数应用到整列数据上
这个方案能覆盖你提到的所有情况,而且对于Python新手来说也容易理解和修改~
内容的提问来源于stack exchange,提问作者Aman Kumar Singh
相关产品推荐
相关产品推荐

