使用python/reges从CSV中查找lat和long

使用python/reges从CSV中查找lat和long,python,regex,Python,Regex,我有一个带有多行地址的CSV。我想提取lat和long并将它们插入到名为lat和long的新列中 地址: ['900 OLD VIRGINIA BEACH RD\nVIRGINIA BEACH, VA 23451\n(36.848522, -75.990597)', '600 PHOENIX DR\nVIRGINIA BEACH, VA 23452\n(36.828849, -76.069027)', '100 BASSETT AV\nVIRGINIA BEACH, VA 23452\n(3

我有一个带有多行地址的CSV。我想提取lat和long并将它们插入到名为lat和long的新列中

地址:

['900 OLD VIRGINIA BEACH RD\nVIRGINIA BEACH, VA 23451\n(36.848522, 
-75.990597)', '600 PHOENIX DR\nVIRGINIA BEACH, VA 23452\n(36.828849, 
-76.069027)', '100 BASSETT AV\nVIRGINIA BEACH, VA 23452\n(36.838597, 
-76.070625)', '1400 NIMMO PW\nVIRGINIA BEACH, VA 23456\n(36.763408, 
-76.021602)', '600 BUSHNELL CT\nVIRGINIA BEACH, VA 23451\n(36.823212,
 -75.977462)', '4900 SWORD RD\nVIRGINIA BEACH, VA 23459\n(36.90665, 
-76.141786)', '1500 PENROSE AR\nVIRGINIA BEACH, VA 23453\n(36.799177, 
-76.124827)', '2000 INDEPENDENCE BL S\nVIRGINIA BEACH, VA 23453', '4400 
LEAMORE SQUARE RD\nVIRGINIA BEACH, VA 23462\n(36.809335, -76.121166)', '4800 
VIRGINIA BEACH BL\nVIRGINIA BEACH, VA 23462\n(36.843743, -76.142357)']
当前正在读取python中的geopandas模块

--按新行拆分

--将最后一项拆分

--删除第一次和最后一次聊天

--由科玛分割

sa = [ x.split('\n')[-1][1:-1].split(',') for x in arr]

print(sa)
[['36.848522', ' -75.990597'], ['36.828849', ' -76.069027'], ['36.838597', ' -76.070625'],
使用一个wring格式的['IRGINIA BEACH','VA 2345']

此表达式

[\s\S]*\(\s*([^,]*?)\s*,([^,]*?)\s*\)
可能会起作用,并且您可能希望为那些没有纬度和经度的输入添加一些
if

试验
如果您希望探索/简化/修改该表达式,可以在的右上面板中对其进行解释。如果您愿意,可以在中查看它与一些示例输入的匹配情况。

Python附带了一个CSV阅读库。用它来代替。
import pandas as pd

data = ['900 OLD VIRGINIA BEACH RD\nVIRGINIA BEACH, VA 23451\n(36.848522, -75.990597)', '600 PHOENIX DR\nVIRGINIA BEACH, VA 23452\n(36.828849, -76.069027)', '100 BASSETT AV\nVIRGINIA BEACH, VA 23452\n(36.838597, -76.070625)', '1400 NIMMO PW\nVIRGINIA BEACH, VA 23456\n(36.763408, -76.021602)', '600 BUSHNELL CT\nVIRGINIA BEACH, VA 23451\n(36.823212, -75.977462)', '4900 SWORD RD\nVIRGINIA BEACH, VA 23459\n(36.90665, -76.141786)', '1500 PENROSE AR\nVIRGINIA BEACH, VA 23453\n(36.799177, -76.124827)', '2000 INDEPENDENCE BL S\nVIRGINIA BEACH, VA 23453', '4400 LEAMORE SQUARE RD\nVIRGINIA BEACH, VA 23462\n(36.809335, -76.121166)', '4800 VIRGINIA BEACH BL\nVIRGINIA BEACH, VA 23462\n(36.843743, -76.142357)']

df = pd.DataFrame(data)

df["lat"]=df[0].str.replace(r'[\s\S]*\(\s*([^,]*?)\s*,([^,]*?)\s*\)', r'\1',regex=True)
df["lon"]=df[0].str.replace(r'[\s\S]*\(\s*([^,]*?)\s*,([^,]*?)\s*\)', r'\2',regex=True)
print(df)