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

如何用Python Pandas将含EH的字符串片段移至另一列?

问题描述

现有一个存储地址信息的pandas DataFrame,结构如下:

地址
10 Pentland Drive, Comiston, Edinburgh, EH10 6PX.
Moray Place, Edinburgh, EH3
Carlton Street, Edinburgh
The Bourse Apartments, 47 Timber Bush, Leith EH6 6QH

需要编写Python代码实现以下需求:

  • 识别每行地址中是否包含EH
  • 将EH及其后续所有字符迁移至新的「邮政编码」列
  • 最终得到如下结构的DataFrame:
地址邮政编码
10 Pentland Drive, Comiston, Edinburgh, .EH10 6PX
Moray Place, Edinburgh,EH3
Carlton Street, Edinburgh
The Bourse Apartments, 47 Timber Bush, LeithEH6 6QH
解决方案

可以通过pandas的字符串处理方法结合正则表达式实现,代码如下:

import pandas as pd

# 示例数据
data = {
    '地址': [
        '10 Pentland Drive, Comiston, Edinburgh, EH10 6PX.',
        'Moray Place, Edinburgh, EH3',
        'Carlton Street, Edinburgh',
        'The Bourse Apartments, 47 Timber Bush, Leith EH6 6QH'
    ]
}
df = pd.DataFrame(data)

# 1. 提取邮政编码:匹配以EH开头的所有内容,空值填充为空字符串
df['邮政编码'] = df['地址'].str.extract(r'(EH.*)').fillna('')

# 2. 清理邮政编码末尾的标点和多余空格(比如去掉末尾的句号)
df['邮政编码'] = df['邮政编码'].str.strip('. ').str.rstrip('.')

# 3. 处理原地址列:移除邮政编码部分,并清理末尾多余的符号/空格
df['地址'] = df.apply(
    lambda row: row['地址'].replace(row['邮政编码'], '').rstrip(', . ') 
    if row['邮政编码'] else row['地址'],
    axis=1
)

print(df)

代码说明

  • str.extract(r'(EH.*)'):用正则表达式提取所有以EH开头的子串,这部分就是邮政编码的核心内容
  • fillna(''):将没有匹配到EH的行填充为空字符串,避免出现NaN
  • 清理邮政编码时,用strip和rstrip去掉末尾可能的标点(如句号)和多余空格
  • 最后通过apply遍历每行,移除原地址中的邮政编码部分,并清理末尾残留的逗号、空格或句号,保证地址格式整洁

执行代码后即可得到目标结构的DataFrame。

内容的提问来源于stack exchange,提问作者Robin Baggott la Velle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:40:42