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

如何快速移除Pandas DataFrame列中的国家信息保留指定姓名?

移除DataFrame中name列的国家信息问题

问题背景

现有列表:

names = ['kramer hickok', 'carlos ortiz ', 'talor gooch', 'mikumu horikawa', 'yoshinori fujimoto']

以及pandas DataFrame page:

name
0kramer hickok united states
1carlos ortiz mexico
2talor gooch united states
3mikumu horikawa japan
4yoshinori fujimoto japan

需要移除name列中的国家信息,得到如下结果:

name
0kramer hickok
1carlos ortiz
2talor gooch
3mikumu horikawa
4yoshinori fujimoto

尝试以下代码但无效:

for name in names:
   page['name'] = page['name'].str.extract(name)

解决方案

方法1:直接利用已有names列表(最快)

因为names列表的内容和目标结果完全匹配,且顺序与DataFrame行一一对应,直接赋值即可:

page['name'] = names
# 可选:统一清理首尾空格
page['name'] = page['name'].str.strip()

这是效率最高的方式,时间复杂度O(n),无需额外字符串处理。

方法2:正则匹配提取目标名字

如果names列表顺序不确定,或需要从原字符串中精准提取,可构造正则匹配:

import re
import pandas as pd

# 先清理names中的首尾空格
clean_names = [name.strip() for name in names]
# 构造正则模式,匹配任意一个目标名字
pattern = r'(' + '|'.join(re.escape(name) for name in clean_names) + r')'
# 提取匹配内容
page['name'] = page['name'].str.extract(pattern)[0]

re.escape用于处理名字中的特殊字符,避免正则语法冲突,确保每个名字都能被准确匹配。

方法3:按单词分割移除最后部分(通用场景)

如果不知道具体名字,仅知道国家是最后一个单词,可从右侧分割字符串:

# 从右侧分割1次,取前半部分并去除首尾空格
page['name'] = page['name'].str.rsplit(n=1).str[0].str.strip()

该方法无需依赖names列表,适合国家均为单个单词的通用场景。

原代码无效原因

你之前的循环中,str.extract需要传入正则表达式格式的参数,而直接传入name无法匹配;同时循环会反复覆盖page['name']的赋值,最终仅保留最后一次匹配的结果,因此无法得到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:36:16