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

如何用Python清洗DataFrame列:移除Account Name中匹配Billing Street的内容

Python清洗Excel数据:移除Account Name中匹配Billing Street的子串

需求说明

清洗Excel数据:若Account Name列内容包含对应行Billing Street列的子串,则将Account Name中匹配的部分替换为空;无匹配则保留原值。

错误尝试代码

import pandas as pd
import numpy as np
import os

File= pd.read_excel('Test_data_for_script.xlsx')
File1=File.copy()

File_1['CLEANSE_NAME']= File_1['Account Name'].str.strip(File_1['Billing Street'])

执行后输出结果为NaN,无法实现预期效果。

问题原因

str.strip()方法仅用于移除字符串首尾的指定字符集合,而非替换任意位置的完整子串;同时pandas的str系列方法是向量化操作,不支持逐行传入不同的匹配值,因此导致结果异常。

正确实现方法

使用apply逐行处理每条数据,针对每行的Account Name和Billing Street进行匹配检查与替换:

方法1:自定义函数处理

import pandas as pd

# 读取Excel文件
df = pd.read_excel('Test_data_for_script.xlsx')
df_copy = df.copy()

def clean_account(row):
    acc_name = row['Account Name']
    bill_street = row['Billing Street']
    # 检查子串存在性,存在则替换并去除多余空格,否则返回原内容
    if bill_street in acc_name:
        return acc_name.replace(bill_street, '').strip()
    return acc_name

# 生成清洗后的列
df_copy['CLEANSE_NAME'] = df_copy.apply(clean_account, axis=1)

# 可选:保存清洗后的数据
df_copy.to_excel('Cleaned_Test_data.xlsx', index=False)

方法2:Lambda表达式简化写法

import pandas as pd

df = pd.read_excel('Test_data_for_script.xlsx')
df_copy = df.copy()

df_copy['CLEANSE_NAME'] = df_copy.apply(
    lambda r: r['Account Name'].replace(r['Billing Street'], '').strip() 
    if r['Billing Street'] in r['Account Name'] 
    else r['Account Name'],
    axis=1
)

说明

两种方法均实现逐行匹配:先判断Billing Street是否是Account Name的子串,若是则替换为空并去除替换后可能产生的多余空格,否则保留原Account Name内容,规避了原代码中str.strip()的使用误区。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:35:15