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

如何在Python中将含"1yr 11mon"的列转换为月数?

解决年月字符串转总月数的Python方案

嘿,作为Python新手能想到用正则来处理这个问题,思路完全没问题!我来帮你把这个想法落地,实现一个简单好用的函数,还能直接处理DataFrame里的整列数据。

核心思路

我们需要从字符串里提取出年数和月数:

  1. 用正则匹配出所有带yr(年)和mon(月)的数字片段
  2. 把年数转换成月数(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:18:39