如何用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
相关产品推荐
相关产品推荐

