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

如何用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(''),
        ''
    )
)

示例输出

InsurerPolicy no.Extracted Policy Prefix
Hdfc ergoABCDE123456789ABCDE123456
TataXYZ12345678XYZ1234
ICICILMNOP98765
HDFC LifePQRS01234567PQRS012345
Tata AIGUVWXYZ1234

注意事项

  • 用strip()处理保险公司名称首尾空格,避免因空格导致匹配失败;
  • 针对保单号为空的情况返回空字符串,避免索引越界错误;
  • case=False参数确保HDFC的大小写变体都能被正确匹配。

内容的提问来源于stack exchange,提问作者Ravindra pol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:24:22