我试图通过将缩写转换为完整的单词(例如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)
而不是Place,我得到了Placeace。避免此错误的最佳方法是什么?我是否写了if-else语句或任何函数?提前谢谢!
答案 0 :(得分:1)
在其他问题中,您有重叠的逻辑:在替换之前,您无法检查目标("旧")字符串是否为完整字。例如,使用输入类型" PLACE",您可以触发第一个和第三个替换,在您达到所需条件之前生成PlaceACE
然后PlaceaceACE
。
您需要仔细检查跟踪和排除逻辑,然后仅应用一个替换。您可以检查street_type的长度,并应用该长度所需的唯一转换。
如果您尝试转换case
语句,则需要遵循该逻辑模式,而不是您编码的连续应用程序。您可以轻松查找如何模拟"案例" Python中的语句。
还要考虑使用翻译词典,例如
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"
...但请务必在整个街道类型列表中正确概括这一点。
答案 1 :(得分:0)
如果您在此处使用正确的正则表达式,则可以通过一次正确执行此操作,例如使用单词边界(\ b):
{{1}}
答案 2 :(得分:0)
有几种现成的地址标准化工具可以解决这个问题以及许多其他问题,这些工具不可避免地会出现在路上。 (例如,USPS识别189个街道后缀,例如RD,每个后缀都有几个可能的缩写和拼写错误。)我工作的公司制作了一个名为YAddress的工具。
答案 3 :(得分:0)
for(j=i;j<n;j++)
{
printf(" ");
}