概要
以前、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
を文字列に変換するのが良いでしょう。