如何通过匹配条件删除字符串的一部分?



我有很多地址信息,例如:

123 1st Ave Apt501, Flushing, New York, 00000, USA
234 West 20th Street 1A, New York, New York, 11111, USA
345 North 100st Street Apt. 110, New York, New York, 22222, USA

我想了解一下街道信息。所以,我想知道如何删除"Ave"one_answers"Street"后面的公寓信息?

因此,地址将被清理为:

123 1st Ave, Flushing, New York, 00000, USA
234 West 20th Street, New York, New York, 11111, USA
345 North 100st Street, New York, New York, 22222, USA

或者可以按照以下方式清理数据:

123 1st Ave
234 West 20th Street
345 North 100st Street

这是我尝试的代码。但是,我无法删除不包含"apt"的公寓信息。

conditions = [df.address.str.contains('Apt')]
choices = [df.address.apply(lambda x: x[x.find('Apt'):])]
df['apt'] = np.select(conditions, choices, default = '')
choices2 = [df.address.apply(lambda x: x[:x.find('Apt')])]
df['address'] = np.select(conditions, choices2, default = df.address) 

我认为你应该把所有的地址包装在一个列表中,并使用分隔符将地址中的每个元素分开,这样你就可以通过索引0访问街道信息。

addresses  = ['123 1st Ave, Flushing, New York, 00000, USA', '234 West 20th Street, New York, New York, 11111, USA',
'345 North 100st Street, New York, New York, 22222, USA']
for s in addresses:
print(s.split(',')[0])

输出
123 1st Ave
234 West 20th Street
345 North 100st Street

为了得到第二个选项,我先用逗号分隔,然后用正则表达式处理第一项。

df['street'] = (df.address
.str.split(',') # split at ,
.str[0] # get the first element
.str.replace('(Apt[.s]*|Streets+)d+w?$',
'')
)

正则表达式匹配

  • Apt后面跟着0个或多个点或空格或
  • Street后接空格
  • 一个或多个整数
  • 可选字母

和字符串($)末尾的所有内容。

这个模式可能需要一些调整,但是对于这个例子来说,它给出了正确的结果。

最新更新