質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

405閲覧

住所を3つに区分し抽出した時のエラー対応

kentaronagata

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/02/01 15:21

編集2023/02/01 15:41

実現したいこと

現在、スクレイピングで抽出してきた住所を県・市町村・番地の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

どのような対応をすればいいか教えていただけたらなと思います。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/02/01 15:37 編集

> これを実行した問いに以下のようなエラーが発生しました。 > TypeError: 'NoneType' object is not subscriptable エラーはどの行で発生したのでしょうか?質問に追記してください。 > うまくいきませんでした。 どのようにうまくいかなかったのか教えてください。質問に追記してください。
kentaronagata

2023/02/01 15:42

すみません。質問が不十分でした。 追記しましたので確認よろしくお願いします。
guest

回答1

0

ベストアンサー

python

1import re 2 3todohuken = [] 4sikutyouson = [] 5banti = [] 6addresses = [todohuken, sikutyouson, banti] 7for address in prefectures_list: 8 matches = re.match(r'(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)' , address) 9 if matches is None: 10 matches = [None] * 4 11 [a.append(matches[i]) for a, i in zip(addresses, range(1, 4))] 12 13print(todohuken) 14print(sikutyouson) 15print(banti)

投稿2023/02/01 15:44

編集2023/02/01 16:01
melian

総合スコア19714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問