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

如何将列表与DataFrame列匹配,提取字符串结尾的位置码至新列?

解决DataFrame提取结尾位置码的问题

问题分析

你当前的代码存在两个核心问题:

  • 循环缩进错误:内层遍历locations的循环没有嵌套在遍历DataFrame字符串列的循环里,导致逻辑完全脱节
  • 缺失判断条件:if语句后没有写具体的匹配逻辑

另外,直接用str.endswith()没生效,是因为该方法传入列表时需要先转成元组,且仅返回布尔值,无法直接提取匹配的位置码。


方法一:修复你的循环逻辑

调整缩进,补充匹配判断,遍历每个字符串时检查是否以某个位置码结尾:

import pandas as pd

locations = ["AG CHEM", "AG SEED", "BH CHEM", "BH FARM", 'BH GREEN', 'CT CHEM', 'Bighorn Farm', 'Courthouse Farm']
# 示例DataFrame
df = pd.DataFrame({"str": ["Growers SeGrowersSecret 14AG CHEM", "Test Farm BH FARM", "Sample Text Courthouse Farm"]})

loc = []
for s in df["str"]:
    matched = None
    # 遍历所有位置码,检查是否为字符串结尾
    for code in locations:
        if s.endswith(code):
            matched = code
            break  # 找到第一个匹配项就停止
    loc.append(matched if matched else "")  # 无匹配则留空

df["Location Code"] = loc

方法二:用Pandas的apply简化代码

利用apply对每行字符串做匹配,更符合Pandas的风格:

def extract_location(s):
    for code in locations:
        if s.endswith(code):
            return code
    return ""

df["Location Code"] = df["str"].apply(extract_location)

方法三:正则表达式提取(更高效)

把位置码转成正则表达式的备选模式,直接提取结尾的匹配项:

import re

# 转义特殊字符,避免正则语法冲突
pattern = re.compile(r'(' + '|'.join(re.escape(code) for code in locations) + ')$')
df["Location Code"] = df["str"].str.extract(pattern, expand=False).fillna("")

这种方法适合数据量较大的场景,执行效率比循环更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:48:22