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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

805閲覧

if,for分について

2omoban

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/12 11:46

編集2021/11/12 12:40

前提・実現したいこと

for分の中にif文を組み込んだところエラーが出て困っています。
政令指定都市の区部を除去したいです。
市区町村名のみのものを残し、それ以降が書いてあるもののデータをそのまま取っ払いたいです。
もしfor分とif文を使わないやり方があればその他のやり方を知りたいです。
ex
札幌市→札幌市(行を残す)
札幌市中央区→行を消す
横浜市青葉区→行を消す
渋谷区→渋谷区

発生している問題・エラーメッセージ

nothing to repeat at position 0

該当のソースコード

python

1i = 0 2for i in range(0,376): 3 if (df_b15_2_2['都道府県名'] == '東京都') & (df_b15_2_2[df_b15_2_2['市区町村名'].str.contains('*市*'or'*区*'or'*町*'or'*村*')]): 4 df_b15_2_2.iloc[[i],[3]] == np.nan 5 i += 1 6 elif (df_b15_2_2['都道府県名'] == '東京都') & (df_b15_2_2[df_b15_2_2['市区町村名'].str.contains('*市'or'*区'or'*町'or'*村')]): 7 i += 1 8 elif (df_b15_2_2['都道府県名'] != '東京都') & (df_b15_2_2[df_b15_2_2['市区町村名'].str.contains('*市*'or'*区*'or'*町*'or'*村*')]): 9 df_b15_2_2.iloc[[i],[3]] == np.nan 10 i += 1 11 elif (df_b15_2_2['都道府県名'] != '東京都') & (df_b15_2_2[df_b15_2_2['市区町村名'].str.contains('*市'or'*区'or'*町'or'*村')]): 12 i += 1 13 14 15

試したこと

都道府県名が東京都で市区町村名に市、区、町、村が含まれるならば(は任意の文字列)NaN出力して、
東京都で
市、区、町、村が含まれるならばそのままで
東京都ではなくて市、区、町、村が含まれるならばNaN出力して、
東京都ではなくて~市、区、町、村が含まれるならばそのままで
それぞれに1を足して繰り返すとしたつもりです。
NaNにはdropnaで後ほど消すつもりです。

補足情報(FW/ツールのバージョンなど)

df_b15_2_2['市区町村名'] = np.where((df_b15_2_2['市区町村名'] = ''or''or''or''),np.nan,df_b15_2_2['市区町村名'])
これも考えたのですがどうでしょうか

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

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

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

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

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

can110

2021/11/13 03:54

前提(実現したいこと)が理解しずらいです。 '都道府県名'と'市区町村名'という2つの列があるようですが、それぞれがどのような文字列の場合、どのような結果を得たい(行を削除するだけ?)のかを、具体例とともに示してください。
2omoban

2021/11/13 14:07

市区町村名(ex 横浜市、渋谷区)の後に文字列(ex 横浜市緑区)が続く場合にはNaNを市区町村名に記入したいです。(ex 横浜市緑区 -> NaN) しかし"横浜市"だけのものもあるのでそれのみだったらそれのみを残したいです。東京の場合は23区もあるので(ex 渋谷区、新宿区)先ほどの"横浜市緑区"とごちゃ混ぜにならないように分けただけです。
can110

2021/11/14 01:00

・この処理を行うために「都道府県名」列の内容を見る必要はあるでしょうか?(やりたい内容からは、その必要はないと思われます) ・条件に該当する場合は「行を消したい」のか「NaNを記入したい」のかどちらでしょうか?(最終的にNaNの行を消したい?) ・政令指定都市ではない「鎌倉市御成町」は条件に該当するでしょうか? ・政令指定都市だが「渋谷区広尾」は条件に該当するでしょうか? なお、質問への追記・修正への回答は、この欄に書くのではなく、質問本文を編集して追記ください。
guest

回答2

0

やりたいことがよく理解できていないかもしれませんが、以下のようなコードで実現できるのではないでしょうか。

Python

1import pandas as pd 2pd.set_option('display.unicode.east_asian_width', True) 3 4# 政令指定都市名ではじまり、それ以降1文字以上含むもの 5cities = ['札幌市', '仙台市', 'さいたま市', '千葉市', '横浜市', '川崎市', '相模原市', '新潟市', '静岡市', '浜松市', '名古屋市', '京都市', '大阪市', '堺市', '神戸市', '岡山市', '広島市', '北九州市', '福岡市', '熊本市'] 6exp = f'^({"|".join(cities)}).+' 7 8df = pd.DataFrame({'市区町村名':['札幌市','札幌市中央区','横浜市青葉区','渋谷区']}) 9print(df) 10 11# 条件に合致する行を除く 12ret = df[~df['市区町村名'].str.match(exp)] 13print(ret) 14# 市区町村名 15#0 札幌市 16#3 渋谷区

投稿2021/11/13 04:31

can110

総合スコア38278

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

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

0

簡単な例で示します。
下記方法ではフラグにNaNは都合が悪いので文字列の'削除'に置き換えています。
参考になさってください。

Python

1import pandas as pd 2import numpy as np 3 4df_b15_2_2 = pd.DataFrame({'都道府県名':['東京都','東京都','','東京都'], '市区町村名':['港区','豊島区','渋谷区','八王子市']}) 5# 都道府県名 市区町村名 6#0 東京都 港区 7#1 東京都 豊島区 8#2 渋谷区 9#3 東京都 八王子市 10 11df_b15_2_2.loc[(df_b15_2_2['都道府県名'] == '東京都') & (df_b15_2_2['市区町村名'].str.contains('市|区|町|村')),'削除'] = '削除' 12# 都道府県名 市区町村名 削除 13#0 東京都 港区 削除 14#1 東京都 豊島区 削除 15#2 渋谷区 NaN 16#3 東京都 八王子市 削除

投稿2021/11/12 12:09

編集2021/11/12 12:51
meg_

総合スコア10607

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

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

2omoban

2021/11/12 12:15

よろしくお願いします!
2omoban

2021/11/12 12:56

'削除'カラムを新しく作るのではなく'市区町村名'内で解決したいのですが他の案はございますか?
meg_

2021/11/12 13:07

df_b15_2_2.loc[(df_b15_2_2['都道府県名'] == '東京都') & (df_b15_2_2['市区町村名'].str.contains('市|区|町|村')),'市区町村名'] = np.nan でどうでしょうか?
2omoban

2021/11/12 13:22

こうですと、市区町村全てがNaNで返されてしまうのでダメかと思います。 私がやりたいのは市区町村名の後に任意の文字列が続いたらNaNで返し、市区町村名の後に何もなければそのままということをやりたいのです。
meg_

2021/11/12 14:44

> こうですと、市区町村全てがNaNで返されてしまうのでダメかと思います。 実際に実行してみてのコメントでしょうか? 手元のサンプルデータでは問題なかったですが。
2omoban

2021/11/13 03:31

実際に試行してみてです。 サンプルデータだと東京都しかないのと、str.contains('市|区|町|村')で市区町村全てのどれかを含むものをNaNで返すという形になっているのでNaNで返すジャts値になってしまうのではないかと。
meg_

2021/11/13 03:42

> サンプルデータだと東京都しかない 質問者さんの「該当のソースコード」に倣ってサンプルコードを作成いたしました。 流用される際には実際のデータに合わせてコードを修正する必要はあるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問