【问题标题】:pull coordinate data from .csv column that has address info [closed]从具有地址信息的 .csv 列中提取坐标数据[关闭]
【发布时间】:2016-10-26 17:56:31
【问题描述】:

我有一系列 .csv 文件,其中包含特定列中的坐标信息。问题是,坐标信息在同一列中有地址信息,而且格式并不总是相同。

15206 PLANK RD
BAKER, LA 70714
(30.586316235000027, -91.12488045299995)

LA
(31.312663324000027, -92.44567750499994)

所以我需要做的就是将 lat 数据拉入一个新列,将 long 数据拉入一个新列。 我确信这是一个非常简单直接的过程,我只是不确定如何解决这个问题。 我想要一个可以为我执行此操作的 python 脚本,我在其中指定要搜索的列,并让它只将坐标信息拉入它从中提取数据的同一行中的新列中。

【问题讨论】:

  • 你的意思是你只是想忽略不包含坐标的行吗?
  • 不,我只需要将信息提取到同一行的新列中,这样我就不会丢失其他属性数据

标签: python csv data-extraction


【解决方案1】:

这是一个小 sn-p,它可以从所需的列中提取长/纬度字段。它使用正则表达式从给定列中提取两个坐标。

output = []
with open(DATA_CSV_NAME, 'rb') as csvfile:
    datareader = csv.reader(csvfile)
    for row in datareader:
        m = re.search('\((-?\d+\.\d+),\s(-?\d+\.\d+)\)', row[DESIRED_COLUMN])
        lat = m.group(1) if m else '0.0'
        long = m.group(2) if m else '0.0'
        row.append(lat)
        row.append(long)
        output.append(row)

下面是一个正则表达式的例子:

>>> m = re.search('\((-?\d+\.\d+),\s(-?\d+\.\d+)\)', '15206 PLANK RD\nBAKER, LA 70714\n(31.312663324000027, -92.44567750499994)')
>>> m.group(0)
'(31.312663324000027, -92.44567750499994)'
>>> m.group(1)
'31.312663324000027'
>>> m.group(2)
'-92.44567750499994'

【讨论】:

  • 此方法用于提取坐标数据,但不会将数据写入新列
  • 有新列。我只是没有添加写出 csv 的代码,但输出数组是您想要的所有数据行,列附加为 lat-long。如果你想要一个 csv 文件,你可以简单地按照 csv 文档docs.python.org/2/library/csv.html#csv.writer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2019-03-11
  • 2010-09-14
  • 2014-01-21
  • 2014-03-29
相关资源
最近更新 更多