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

如何用Pandas仅转换DataFrame特定行?实现期限转月数

我来帮你搞定这个Pandas的Term列转换问题,按照你的需求,我们可以用自定义函数结合apply()方法实现,逻辑清晰还容易维护,直接上代码和解释:

解决方案

步骤1:构造示例DataFrame(模拟你的数据)

先把你给出的部分数据补全,包含两种Term格式(需要转换的期限格式和需要保留的_variable_value格式):

import pandas as pd

data = {
    'institution_short_name': ['One Standard']*6,
    'product_name': ['Standard']*6,
    'Term': ['_01y_value', '_02y_value', '01m', '06m', '01y', '03y'],
    'term': [4.85, 5.15, 2.3, 3.1, 4.5, 5.2]
}
df = pd.DataFrame(data)

步骤2:定义转换函数

这个函数会判断每个Term值的格式,决定是保留原样还是转换为月数:

def convert_term(term_str):
    # 识别需要保留的_variable_value格式(以_开头且以_value结尾)
    if term_str.startswith('_') and term_str.endswith('_value'):
        return term_str
    # 处理m/y格式的期限
    try:
        num = int(term_str[:-1])
        unit = term_str[-1].lower()
        if unit == 'm':
            return num
        elif unit == 'y':
            return num * 12
    except (ValueError, IndexError):
        # 遇到无法解析的格式时,直接返回原内容避免报错
        return term_str
    # 其他未知单位也返回原内容
    return term_str

步骤3:应用转换函数到Term列

df['Term'] = df['Term'].apply(convert_term)

处理后的结果

运行后你的DataFrame会变成这样:

institution_short_name product_name      Term  term
0           One Standard     Standard  _01y_value  4.85
1           One Standard     Standard  _02y_value  5.15
2           One Standard     Standard          1  2.30
3           One Standard     Standard          6  3.10
4           One Standard     Standard         12  4.50
5           One Standard     Standard         36  5.20

逻辑说明

  • 对于_xxy_value这类格式,我们通过startswith('_')和endswith('_value')精准判断,直接返回原字符串
  • 对于01m/01y格式,提取数字部分转成整数,根据单位m(月)直接返回数字,y(年)则乘以12得到总月数
  • 加入了异常处理,避免遇到无法解析的格式时程序报错,直接返回原内容保证数据完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:07:09