こんにちはー!シミヅですっ!
AIのモデルを作ったりデータをこねくり回したりしてると、避けて通れないのが「データの掃除(前処理)」なんですよ。
特にスクレイピングしてきたテキストデータなんかは、いらない記号や改行が混じってて「あぁー!この文字だけ消したいっ!」ってなることがめちゃくちゃ多いんです(笑)。
Pythonには文字を消す方法がいくつかあるんですけど、実は「どれを使っても同じ」じゃないんですよね。
状況に合わせて使い分けないと、思わぬバグになったり、処理が激重になったりすることも……。
今日は、僕が現場でよく使う「特定の文字を削除するテクニック」を、初歩的なものからプロっぽいものまで一気に解説しちゃいますねっ!
執筆者:シミヅ |
|
一番よく使う!replace()で特定の文字を全部消す
まずはこれ!
「特定の文字を消す」って言ったら、真っ先に思い浮かぶのが replace() メソッドですね。
これは「Aという文字をBという文字に置き換える」という機能なんですけど、「消したい文字を空っぽの文字(””)に置き換える」ことで、実質的に削除できちゃうんです。
とにかくシンプルで分かりやすいのがいいところですねー。
# 元の文字列
text = "P-y-t-h-o-n"
ハイフン(-)を空文字に置き換えて消す!
clean_text = text.replace("-", "")
print("削除前:", text)
print("削除後:", clean_text)
このコードのポイントは、replace("-", "") の部分です!
第一引数に「消したい文字」、第二引数に「””(空の文字列)」を指定することで、文字列の中に含まれるすべてのハイフンを根こそぎ消し去ってくれます。
ただし注意点もあって、この方法は「全部消しちゃう」んですよ。
「最初に出てきた1つ目だけ消したい!」っていう時は、第三引数に回数を指定して text.replace("-", "", 1) って書く必要があるので、そこだけ気をつけてくださいね!
文字列の端っこだけ掃除したいならstrip()
「データの先頭や末尾に、変なスペースや改行が入ってて邪魔!」っていう時は、strip() 系の出番ですっ!
これは文字列の途中にある文字には一切触れず、両端だけを綺麗にしてくれるお掃除担当みたいなメソッドなんですよ。
# 前後に余計な文字がある場合
text = "!!!Hello Python!!!"
両端の「!」を削除!
clean_text = text.strip("!")
print("結果:", clean_text)
strip() の引数に消したい文字(今回は “!”)を渡すと、端っこにあるその文字を全部剥ぎ取ってくれます。
ちなみに、左側だけなら lstrip()、右側だけなら rstrip() っていう使い分けもできるので便利ですね。
実務だと、CSVファイルを読み込んだ時の改行コード \n を消すために text.rstrip() を使うのがお約束ですねー。
これを忘れると、後の判定処理で「あれ、文字が一致しないっ!」ってパニックになるかもです(笑)。
複数の文字を一気に消し去るtranslate()
「『!』も『?』も『,』も、とにかく記号をまとめて全部消したいんだーっ!」
そんな時に replace() を何個も繋げて書くのは、ちょっとスマートじゃないですよね。
そこで登場するのが translate() です!
これ、ちょっと使い方が特殊なんですけど、覚えておくと「おっ、こいつデキるな」って思われますよ。
# 消したい記号がいっぱいある文字列
text = "Apples, Oranges! & Bananas?"
消したい文字の対応表を作る(Noneを指定すると削除になるよ!)
remove_table = str.maketrans("", "", ",!&?")
対応表を使って一気に消すっ!
clean_text = text.translate(remove_table)
print("一括削除後:", clean_text)
まず str.maketrans("", "", ",!&?") で、「この文字たちは消してねー」っていう指示書(テーブル)を作ります。
第三引数に渡した文字がすべて削除対象になるんです。
あとは translate() にその指示書を渡すだけ!
一文字ずつ replace() をループで回すよりも圧倒的に高速なので、大量のデータを扱うAIエンジニアの僕らには必須のテクニックなんですよー。
最終兵器!正規表現 re.sub() でパターン削除
最後はこれ、正規表現(Regex)です!
「特定の文字」っていうよりも、「数字だけ全部消したい」とか「特定のパターンに合う文字を消したい」っていう、より複雑な条件の時に使いますっ。
Pythonの re モジュールを使えば、魔法みたいな削除ができますよ。
import re
数字が混ざった文字列
text = "2026年現在のユーザー数は12345人です!"
\d は「数字」を表すパターン。これを空文字にする!
clean_text = re.sub(r"\d", "", text)
print("数字だけ消した後:", clean_text)
re.sub(r"\d", "", text) という書き方で、文字列に含まれる「数字(\d)」を全部見つけて消してくれます。
r"\d+" にすれば「連続した数字」として扱えますし、もっと複雑な条件も書けるんです。
正規表現はちょっと勉強が必要なんですけど、一度覚えるとテキスト処理の無敵感がすごいんですよ!
「アルファベット以外全部消す」なんて処理も、一行で書けちゃいますからねっ!
まとめ:ベストな削除方法はケースバイケース
さてさて、いろいろ紹介してきましたけど、「結局どれを使えばいいの?」ってなりますよね。
僕なりの判断基準をまとめてみました!
| やりたいこと | 使うべき方法 |
|---|---|
| 特定の1種類の文字を全部消す | replace() |
| 文字列の端っこだけ綺麗にする | strip() |
| 複数の異なる文字を一気に消す | translate() |
| 数字や記号などパターンで消す | re.sub() |
基本は replace() でOK!
でも、データが大量にある時や、消したい文字の種類が多い時は translate() や re.sub() を検討する、というのがエンジニアの流儀です。
「とりあえず動けばいいや」じゃなくて、こういう使い分けができるようになると、コードに人間味(というかこだわり)が出てきますよね。
皆さんも、手元のデータに合わせて最適な方法を選んでみてください。
それじゃあ、また次の記事でお会いしましょうー!シミヅでしたっ!



コメント