如何用Python按列值提取指定长度字符(模拟Excel LEFT函数)
在Python中根据保险公司提取保单号指定长度字符的实现
核心逻辑
根据Insurer列的值,对Policy no.列执行以下提取规则:
- 若保险公司名称包含
HDFC(不区分大小写,如Hdfc、Hdfc ergo等变体),提取保单号前10个字符; - 若保险公司名称精确匹配
Tata,提取保单号前7个字符; - 其他情况返回空字符串。
实现方案(Pandas)
方法1:自定义函数+apply(适合复杂逻辑场景)
import pandas as pd # 示例表格数据 data = { 'Insurer': ['Hdfc ergo', 'Tata', 'ICICI', 'HDFC Life', 'Tata AIG'], 'Policy no.': ['ABCDE123456789', 'XYZ12345678', 'LMNOP98765', 'PQRS01234567', 'UVWXYZ1234'] } df = pd.DataFrame(data) def extract_policy_prefix(row): insurer = row['Insurer'].strip() policy_no = row['Policy no.'] # 匹配HDFC相关保险公司(不区分大小写) if 'HDFC' in insurer.upper(): return policy_no[:10] if policy_no else '' # 精确匹配Tata elif insurer == 'Tata': return policy_no[:7] if policy_no else '' # 其他情况返回空值 else: return '' # 生成提取结果列 df['Extracted Policy Prefix'] = df.apply(extract_policy_prefix, axis=1) # 查看结果 print(df)
方法2:矢量化操作(效率更高,适合大数据量)
利用Pandas矢量化字符串方法+numpy.where实现,避免逐行循环:
import pandas as pd import numpy as np df = pd.DataFrame(data) # 链式条件判断生成结果 df['Extracted Policy Prefix'] = np.where( df['Insurer'].str.contains('HDFC', case=False, na=False), df['Policy no.'].str[:10].fillna(''), np.where( df['Insurer'].str.strip() == 'Tata', df['Policy no.'].str[:7].fillna(''), '' ) )
示例输出
| Insurer | Policy no. | Extracted Policy Prefix |
|---|---|---|
| Hdfc ergo | ABCDE123456789 | ABCDE123456 |
| Tata | XYZ12345678 | XYZ1234 |
| ICICI | LMNOP98765 | |
| HDFC Life | PQRS01234567 | PQRS012345 |
| Tata AIG | UVWXYZ1234 |
注意事项
- 用
strip()处理保险公司名称首尾空格,避免因空格导致匹配失败; - 针对保单号为空的情况返回空字符串,避免索引越界错误;
case=False参数确保HDFC的大小写变体都能被正确匹配。
内容的提问来源于stack exchange,提问作者Ravindra pol
相关产品推荐
相关产品推荐

