我真的很纠结于正则表达式,我希望得到一些帮助。
我有这样的列
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)
在这里,我们可以选择删除后面的空格,然后匹配逗号后面的空格。
(?= )
是一个正向前看,在这种情况下,我们检查后面的数字。如果匹配,分割将只删除逗号和空格。