如何在Pandas DataFrame中移除Name列的最后两个词?
移除Pandas DataFrame中'Name'列的年份和地点
方法一:正则表达式批量替换
针对'Name'列里混有4位年份(如2024)和指定地点(伊斯兰堡、拉合尔等)的情况,用正则一次性匹配并移除这些内容即可,步骤如下:
- 导入依赖并准备示例数据:
import pandas as pd import re # 示例DataFrame(可替换成你的真实数据) df = pd.DataFrame({ 'Name': [ '2024 伊斯兰堡 城市供水项目', '拉合尔 2023 道路修缮工程', '卡拉奇 社区绿化计划 2022', '2021 白沙瓦 校园翻新项目' ] })
- 定义需移除的地点列表,构建正则匹配模式:
# 补充你需要移除的所有地点名称 locations = ['伊斯兰堡', '拉合尔', '卡拉奇', '白沙瓦'] # 对地点名称做转义,避免特殊字符干扰正则匹配 escaped_locations = [re.escape(loc) for loc in locations] # 构建正则模式:匹配4位年份 或 指定地点,前后可能带空格 pattern = r'\s*(?:\d{4}|' + '|'.join(escaped_locations) + r')\s*'
- 执行替换并清理多余空格:
# 替换目标内容,同时合并连续空格、去除首尾空格 df['Cleaned_Name'] = df['Name'].str.replace(pattern, '', regex=True)\ .str.replace(r'\s+', ' ', regex=True)\ .str.strip()
处理后Cleaned_Name列会得到纯核心内容,比如城市供水项目、道路修缮工程等。
方法二:直接提取核心内容(适合固定结构)
如果'Name'列的格式是「年份/地点 + 核心名称 + 年份/地点」,可以直接捕获中间的核心文本:
df['Cleaned_Name'] = df['Name'].str.extract( r'^(?:\d{4}|' + '|'.join(escaped_locations) + r')?\s*(.*?)\s*(?:\d{4}|' + '|'.join(escaped_locations) + r')?$' )[0]
这个方法和方法一效果一致,更适合格式规整的数据集。
内容的提问来源于stack exchange,提问作者Winston Mulyawan Setiabudi
相关产品推荐
相关产品推荐

