前提・実現したいこと
pandasのdataframeに対して、正規表現を使ってマッチしなかった行を、別なdataframeとして取得しようとしています。
実行結果としては欲しい結果を取得できたのですが、IPアドレスにあたる正規表現を行ったところ以下のようなwarningが表示されました。
IPの正規表現を書いたtarget_df["ip"].str.containsについてのみ、以下のエラーメッセージが表示されます。
(id列のような数値のみの場合はエラーは出力されませんでした)
このメッセージが出る理由(extractを使うように通知している?)、出ないようにする対策はありますでしょうか。
発生している問題・エラーメッセージ
UserWarning: This pattern has match groups. To actually get the groups, use str.extract. return func(self, *args, **kwargs)
該当のソースコード
python3
1import pandas as pd 2 3 4def tmp(): 5 data = { 6 "id": {"0": "123", "1": "456x", "2": "789"}, 7 "ip": {"0": "192.168.1.1", "1": "192.168.1.2", "2": "192.168.1.999"}, 8 } 9 10 target_df = pd.DataFrame(data) 11 12 # IDのチェック 13 tmp_df = target_df[~target_df["id"].str.contains(r"^[0-9]{3}$", na=False)] 14 if 0 < len(tmp_df): 15 print("ID 異常") 16 print(tmp_df) 17 18 # IPのチェック 19 tmp_df = target_df[ 20 ~target_df["ip"].str.contains( 21 r"^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$", 22 na=False, 23 ) 24 ] 25 if 0 < len(tmp_df): 26 print("IP 異常") 27 print(tmp_df) 28 29 30if __name__ == "__main__": 31 tmp() 32
試したこと
検索はしてみたのですが、エラーは出るけど気にしなくても良いと書いているページしか見つけられていません。
extractを使ってコードを書こうとしたのですが、意図した結果が取得できる書き方がわかっていません。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/13 10:03