如何用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, Leith | EH6 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
相关产品推荐
相关产品推荐

