2016-10-26 3 views
-1

特定の列に座標情報を持つ一連の.csvファイルがあります。問題は、座標情報のアドレス情報が同じ列にあり、必ずしも同じ形式であるとは限りません。アドレス情報を持つ.csv列から座標データを引き出す

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

または

LA 
(31.312663324000027, -92.44567750499994) 

だから私は何をする必要があるか新しい列にちょうど緯度データを引き出し、そして長いデータの新しい列にあります。 これはかなり簡単なストレートフォワードプロセスであると確信していますが、私はこれにどのように対処するか分かりません。 私は検索する列を指定し、座標情報をその列からデータを取り出す同じ列の新しい列に引っ張るようにするために、これを行うことができるPythonスクリプトを用意したいと思います。

+0

あなたは単に座標を含まない行を無視することを意味しますか? – Peaceful

+0

いいえ、私は他の属性データを失うことはありませんので、同じ行の新しい列に情報を配置するために抽出する必要があります – morgan

答えて

0

ここでは、希望の列からロング/ラットフィールドを抽出するための小さなスニペットを示します。正規表現を使用して、指定された列から2つの座標を抽出します。

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' 
+0

このメソッドは座標データを抽出するために動作していますが、列 – morgan

+0

新しい列があります。私はちょうどcsvを書き出すためのコードを追加しなかったが、出力配列は、あなたがlat-longとして追加された列を持つすべてのデータ行です。 csvファイルが必要な場合は、csvのドキュメント(https://docs.python.org/2/library/csv.html#csv.writer)に従ってください。 – Pyrce

関連する問題