首页 > 解决方案 > 如何正确标准化地址类型

问题描述

我试图通过将缩写转换为完整的单词(例如 RD - Road)来标准化街道地址。我创建了许多行来解释不同的拼写,并遇到了一个替换代码覆盖另一个代码的问题

import pandas as pd 

mydata = {'Street_type': ['PL', 'pl', 'Pl', 'PLACE', 'place']}
mydata = pd.DataFrame(mydata)

mydata['Street_type'] = mydata['Street_type'].replace('PL','Place',regex=True)
mydata['Street_type'] = mydata['Street_type'].replace('pl','Place',regex=True)
mydata['Street_type'] = mydata['Street_type'].replace('Pl','Place',regex=True)
mydata['Street_type'] = mydata['Street_type'].replace('PLACE','Place',regex=True)
mydata['Street_type'] = mydata['Street_type'].replace('place','Place',regex=True)

我得到的是 Placeace,而不是 Place。避免此错误的最佳方法是什么?我要写 if-else 语句或任何函数吗?提前致谢!

标签: pythonreplace

解决方案


在其他问题中,您有重叠的逻辑:在替换它之前,您没有检查目标(“旧”)字符串是否是一个完整的单词。例如,使用“PLACE”的输入类型,您会触发第一个和第三个替换,生成PlaceACE然后PlaceaceACE在您到达您想要的条件之前。

您需要仔细研究跟踪和排除逻辑,然后仅应用其中一种替换。您可以检查 street_type 的长度并应用该长度所需的唯一过渡。

如果您尝试转换case语句,那么您需要遵循该逻辑模式,而不是您编写的连续应用程序。您可以轻松查看如何在 Python 中模拟“case”语句。

还可以考虑使用翻译词典,例如

type_trans = {
    "pl":    "Place",
    "Pl":    "Place",
    "PLACE": "Place",
    ...
}

那么你的改变很简单

mydata['Street_type'] = type_trans[mydata['Street_type']]

此外,您可能会在一个元组中列出所有变体,例如:

type_place = ("PL", "Pl", "pl", "PLACE", "place")
if mydata['Street_type'] in type_place
mydata['Street_type'] = "Place"

...但请务必为您的整个街道类型列表正确概括这一点。


推荐阅读