按正则表达式拆分列



我真的很纠结于正则表达式,我希望得到一些帮助。

我有这样的列

import pandas as pd
data = {'Location': ['Building A, 100 First St City, State', 'Fire Station # 100, 2 Apple Row, City, State Zip', 'Church , 134 Baker Rd City, State']}
df = pd.DataFrame(data)
Location
0              Building A, 100 First St City, State
1  Fire Station # 100, 2 Apple Row, City, State Zip
2                 Church , 134 Baker Rd City, State

我想把它分割到下面的代码块,任何时候都有一个逗号,后面跟着空格,然后是一个数字。但是,我在删除数字时遇到了一个问题。

Location Name                        Address
0          Building A       100 First St City, State
1  Fire Station # 100  2 Apple Row, City, State, Zip
2              Church       134 Baker Rd City, State

这是我一直在使用的代码

df['Location Name']= df['Location'].str.split('.,sd', expand=True)[0]
df['Address']= df['Location'].str.split('.,sd', expand=True)[1]

您可以使用Series.str.extract:

df[['Location Name','Address']] = df['Location'].str.extract(r'^(.*?),s(d.*)', expand=True)

^(.*?),s(d.*)正则表达式匹配

  • ^-字符串
  • 起始
  • (.*?)-组1('位置名称'):除换行符外的任何零或多个字符尽可能少
  • ,s-逗号和空格
  • (d.*)-组1 ('Address'):数字和其余的行。

查看regex演示

另一个简单的解决方案是使用积极的前瞻性。您需要检查模式前面是否有一个数字,而不包括匹配中的数字。下面是一个解决问题的正则表达式示例:

s?,s(?=d)

在这里,我们可以选择删除后面的空格,然后匹配逗号后面的空格。

(?= )是一个正向前看,在这种情况下,我们检查后面的数字。如果匹配,分割将只删除逗号和空格。

相关内容

  • 没有找到相关文章

最新更新