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

如何在Pandas DataFrame中移除地址列中的分数?

解决Pandas地址列移除分数的问题

嘿,我来帮你搞定这个地址清洗的问题!针对你的两个疑问,我一步步给你讲清楚:

1. 不用手动遍历DataFrame!

首先,Pandas提供了非常高效的矢量化字符串操作,完全不需要你手动循环每一行。直接用str.replace()方法就能对整个地址列批量处理,速度比循环快N倍,代码也更简洁。

2. 优化你的正则表达式

你的思路是对的,但可以让正则更简洁、更通用:

方法一:通用移除所有分数(不管位置)

如果你的地址里分数可能出现在任意位置,用这个正则直接匹配分数(比如1/4)以及它前后的空格,替换成单个空格,再清理首尾的多余空格:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'address': ['580 1/4 Broadway Street', '85 1/4 Grand Street']
})

# 清洗地址
df['clean_address'] = df['address'].str.replace(r'\s*\d+/\d+\s*', ' ', regex=True).str.strip()
  • \s*:匹配0个或多个空格(处理分数前后可能有1个或多个空格的情况)
  • \d+/\d+:匹配分数格式(比如1/4、3/8等)
  • 最后用str.strip()去掉首尾可能残留的空格

方法二:精准匹配街道号后的分数(针对你的示例场景)

如果分数总是紧跟在街道编号后面,用分组匹配更精准,避免误删其他可能的分数(虽然你的示例里没有,但更严谨):

df['clean_address'] = df['address'].str.replace(r'(\d+)\s+\d+/\d+\s+(.*)', r'\1 \2', regex=True)
  • (\d+):捕获街道编号(比如580、85)
  • \s+\d+/\d+\s+:匹配街道号和街道名之间的分数及空格
  • (.*):捕获后面的街道名称
  • 替换为\1 \2:把街道编号和街道名用空格连接,去掉中间的分数

关于你原来的正则

你用的^(.*)\d+/\d+\s(.*)其实能工作,但.*是贪婪匹配,如果地址里有多个数字片段,可能会意外匹配到更多内容。比如如果地址是"123 45 1/2 Main St",它会把"123 45 "作为第一个分组,虽然结果是对的,但不如上面的正则精准或简洁。

最终效果

运行代码后,你的clean_address列会变成:

0    580 Broadway Street
1     85 Grand Street
Name: clean_address, dtype: object

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:22