実現したいこと
現在、スクレイピングで抽出してきた住所を県・市町村・番地の3つの区分に分けてデータフレームに置き換えようとしています。
発生している問題・エラーメッセージ
以下の三つの区分に分ける操作でエラーが発生しました。
python
1import re 2 3todohuken = [] 4sikutyouson =[] 5banti =[] 6m = 0 7for count in range(len(prefectures_list)): 8 address = prefectures_list[m] 9 print(address) 10 matches = re.match(r'(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)' , address) 11 todohuken.append(matches[1]) 12 sikutyouson.append(matches[2]) 13 banti.append(matches[3]) 14 m +=1 15 16print(todohuken) 17print(sikutyouson) 18print(banti)
7行目のprefectures_listには以下の値が入っています。
['群馬県館林市花山町3278', '群馬県館林市つつじ町', '群馬県館林市つつじ町14-1', '群馬県館林市松原1-22-2', '群馬県館林市本町3-8-14', '群馬県館林市本町2-16-26', '群馬県館林市本町2-17-33', '群馬県館林市大手町7-37', '館林市本町2-17-27', '群馬県館林市本町1‐1834‐1', '群馬県館林市仲町3-33', '馬県館林市本町2-8-24', '群馬県館林市本町3-1-5', '群馬県館林市本町2-7-1', '群馬県館林市本町2-3-1', '群馬県館林市本町2-3', '群馬県館林市本町2-1', '群馬県館林市本町2-2-4', '群馬県館林市仲町1-7', '群馬県館林市本町2-3-48', '群馬県館林市堀工町1624', '群馬県館林市堀工町1570', '群馬県館林市堀工町1746']
これを実行した時に11行目で以下のようなエラーが発生しました。
NameError Traceback (most recent call last) /var/folders/vg/1tr13rls67v4h6fmkdl8xbq40000gn/T/ipykernel_11889/3105565104.py in <module> 9 print(address) 10 matches = re.match(r'(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)' , address) ---> 11 if matches[1] is none: 12 before = re.search(r'.*県',prefectures_list[m-1]) 13 prefectures =before.group() TypeError: 'NoneType' object is not subscriptable
おそらく、リスト内に県名が記載されていない(館林市本町2-17-27)住所がありエラーが発生したと思われます。
この後データフレームに入れたいので、県名がない場合はnoneを返すようなことはできないでしょうか?
試したこと
python
1import re 2 3todohuken = [] 4sikutyouson =[] 5banti =[] 6m = 0 7for count in range(len(prefectures_list)): 8 address = prefectures_list[m] 9 print(address) 10 matches = re.match(r'(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)' , address) 11 if matches[1] is none: 12 before = re.search(r'.*県',prefectures_list[m-1]) 13 prefectures =before.group() 14 todohuken.append(prefectures) 15 sikutyouson.append(matches[2]) 16 banti.append(matches[3]) 17 else: 18 todohuken.append(matches[1]) 19 sikutyouson.append(matches[2]) 20 banti.append(matches[3]) 21 m +=1 22 23print(todohuken) 24print(sikutyouson) 25print(banti)
とif文を使用しmatches[1]に値がなければリストの一つ前の都道府県を格納するようにしようとしたのですが同じ11行目で以下のようなエラーが出てしまいうまくいきませんでした。
NameError Traceback (most recent call last) /var/folders/vg/1tr13rls67v4h6fmkdl8xbq40000gn/T/ipykernel_11889/3105565104.py in <module> 9 print(address) 10 matches = re.match(r'(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)' , address) ---> 11 if matches[1] is none: 12 before = re.search(r'.*県',prefectures_list[m-1]) 13 prefectures =before.group() NameError: name 'none' is not defined
どのような対応をすればいいか教えていただけたらなと思います。
よろしくお願いします。
回答1件