从Pandas Dataframe 中获取x,y坐标,其中有多种位置格式

myss37ts  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(109)

我正在尝试编写代码,它将迭代Pandas数据框中的行,并将根据特定列中的值是否为经纬度坐标将行添加到列表中。有问题的列包含了几种格式的位置,但我们只需要lat,long坐标。以下是该列的简要预览以及格式的变化:
| 位置|
| --|
| 12010 HWY 61|
| 39.643114,-104.716489|
| (40.611712,-103.234619),Sterling,CO 80751|
| 39.111393,-108.410419|
| 北纬40°29'59.8“,西经104°37'14.9“|
我们只需要 Dataframe 中格式为(x,y)的项,例如(39.643114,-104.716489),这意味着不需要以度分秒为单位的地址和项。
到目前为止,我的想法是创建一个新列表,定义我们正在检查的条件,然后创建一个循环或函数,将这些行追加到新列表中:

xy = []
coords = r'^-?\d+\.\d+,\s-?\d+\.\d+$'

for i, row in csg.iterrows():
    if re.match(coords, row["Locations"]):
        xy.append(row)

其中“csg”是我正在使用的dataframe的名称。由于某些原因,此代码块未拾取任何lat,long坐标。关于条件:

coords = r'^-?\d+\.\d+,\s-?\d+\.\d+$'

我已经尝试使它包含可能是正的或负的值,独立于长度的变化,并且包含可能或可能不被逗号后的空格分隔的值。
如果可能的话,我还希望最终的代码能够从 Dataframe 中包含lat,long坐标作为较长位置的一部分的项目中提取lat,long坐标,例如提供的示例列中的项目3。

eulz3vhy

eulz3vhy1#

您的模式无法匹配任何坐标,因为您正在使用Hyphen-Minus,而DataFrame中的某些行包含Hyphen。还有一点,即使处理了,你的模式也不能匹配所有有效的lat/lon坐标(* 例如第2和第3行 *)。
试试这个:

pat = r"(?P<Latitude>[-‐\d.]+),\s*(?P<Longitude>[-‐\d.]+)"

out = csg.join(csg["Locations"].str.extract(pat))

演示:[ Regex101 ]
输出量:

print(out)

                                      Locations   Latitude    Longitude
0                                  12010 HWY 61        NaN          NaN
1                         39.643114,‐104.716489  39.643114  ‐104.716489
2  (40.611712, ‐103.234619), Sterling, CO 80751  40.611712  ‐103.234619
3                        39.111393, ‐108.410419  39.111393  ‐108.410419
4                   40°29'59.8"N, 104°37'14.9"W        NaN          NaN

如果您需要列表:

l = csg["Locations"].str.extract(pat).dropna().to_numpy().tolist()

[['39.643114', '‐104.716489'],
 ['40.611712', '‐103.234619'],
 ['39.111393', '‐108.410419']]

相关问题