LoginSignup
0
0

【Python】re.sub関数を使ってX.0の0を消す方法 & str()使って文字列にした方が良い

Posted at

概要

以前、pandasで発生する現象として「X.0になる」問題の解決方法を記事にしました。
【Python】Pandasでデータを抽出する時、整数値が小数点になってしまう問題の解決方法3選

ただし、今回これとは別でPythonコード内でこういったことをゼロにしようということになりましたので、その実装方法も記載します。

サンプルコード

import re

def resubFloat(value):
    if value is not None:
        return re.sub(r'\.0$', '', str(value))
    else:
        return value

sample_value = 1.0
sample_number=resubFloat(sample_value)
print(sample_number) # 1

コードの補足:

reモジュール(正規表現操作)をインポート
re.sub(r'\.0$', '', str(value)): 正規表現を使って文字列を操作。文字列内の.0で終わる部分を空文字列に置換します。re.sub関数は、基本的に以下のように使われます。

re.sub(pattern, replacement, string)

pattern(第一引数): 正規表現のパターン文字列
replacement(第二引数): 置換後の文字列
string(第三引数): 置換を行いたい対象の文字列

上記のように使って、与えられた正規表現のパターンにマッチする部分を、指定した置換文字列で置き換えます。
replace()は完全一致に使われますが、正規表現にマッチした文字列を置換したい場合にはre.sub()が有効ですね。

処理対象は文字列を渡すこと

一点、注意点があります。
re.sub関数を以下のように使うとエラーになることがあります。

        return re.sub(r'\.0$', '', value)

Traceback (most recent call last):
  File "/Users/xxx/Projects/TEST/test-resubfloat.py", line 10, in <module>
    sample_number=resubFloat(sample_value)
  File "/Users/xxx/Projects/TEST/test-resubfloat.py", line 5, in resubFloat
    return re.sub(r'\.0$', '', value)
  File "/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/Versions/3.10/lib/python3.10/re.py", line 209, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object

これは、re.sub()関数は、文字列を引数として受け取るため。
valueが文字列でない可能性がある場合は、str()関数を使用してvalueを文字列に変換するのが良いでしょう。

公式ドキュメント

6.2. re.sub() — 正規表現操作 — Python 3.8.0 ドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0