如何用Pandas结合正则按另一列条件替换字符串列结尾指定子串
错误原因
str.replace() 方法必须传入「匹配规则」和「替换为的内容」两个必填参数,你的代码里只写了正则匹配规则,没指定替换目标值,所以触发参数缺失报错。另外你写的正则规则也存在问题:仅给最后一个Inc加了行尾匹配符$,会导致其他后缀匹配到字符串中间的内容,同时正则里的.没有转义,会匹配任意字符,不符合「仅匹配结尾后缀」的需求。
正确实现代码
首先修正正则规则,统一匹配结尾的4种后缀,同时自动去掉后缀前的空格:
import pandas as pd # 构造示例数据集 data = { 'id': [1,2,3,4,5], 'company name': ['Finl Corp.', 'Fund Tr Corp', 'Inc Invt Fd', 'Govt Fd Inc.', 'Trinity Inc'], 'value': [7,6,5,3,5] } df = pd.DataFrame(data) # 1、先初始化简洁名称列为原公司名,保证不符合条件的行保持原值 df['company_name_concise'] = df['company name'] # 2、构造过滤条件 mask = df['value'] >=5 # 3、对符合条件的行做后缀替换 df.loc[mask, 'company_name_concise'] = df.loc[mask, 'company name'].str.replace( r'\s*(Corp\.?|Inc\.?)$', # 匹配结尾的Corp、Corp.、Inc、Inc.以及前面的空格 '', # 替换为空字符串 regex=True )
输出结果验证
运行后得到的结果和预期完全一致:
id company name value company_name_concise 0 1 Finl Corp. 7 Finl 1 2 Fund Tr Corp 6 Fund Tr 2 3 Inc Invt Fd 5 Inc Invt Fd 3 4 Govt Fd Inc. 3 Govt Fd Inc. 4 5 Trinity Inc 5 Trinity
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

