Pythonの文字列操作は、組み込みのメソッド群によって実現されており、それらは不変なので新しい文字列を返します。
このガイドでは、Pythonで文字列から空白を取り除く(他の言語ではトリミングとも呼ばれる)メソッドについて見ていきます。
トリムメソッド – strip()
Pythonでは、strimメソッドは先頭と末尾のスペースと特定の文字を削除することができます。
先頭と末尾のスペースには、空白、タブ (t
), キャリッジリターン (rr
, n
) といった、あまり知られていないホワイトスペース文字が含まれますが、これらはここで見つけることができます。
文字列からスペースや特定の文字を取り除くには、3つの方法があります。
-
strip(chars)
– vanilla stripメソッドは、文字列の左側と右側の両方から、指定された空白文字や文字を取り除きます。 -
lstrip(chars)
– メソッド名の ‘l’ は left に対応し、このメソッドは入力文字列の左側にあるホワイトスペースや文字を除去します。 -
rstrip(chars)
– メソッド名の’r’は右側に対応し、入力文字列の右側にある文字を除去します。
文字列から文字を取り除くには、メソッドへの引数として input.rstrip("abc")
のように渡す必要があります。
文字列のトリミングと空白文字の削除
さて、これらのメソッドがどのような機能を持っているかがわかったところで、いくつかの例を挙げてみましょう。
ここでは、 input
と output
という文字列があります。
変数 input
は、末尾と先頭の両方にスペースを含む文字列を表し、文字列 output
は、これらのスペースを強調するために使用できるテンプレートです。
# trim.py
input = " Stack Abuse "
output = "|{}|"
# Remove leading spaces or spaces to the left
print("lstrip() Output:", output.format(input.lstrip()))
# Remove trailing spaces or spaces to the right
print("rstrip() Output:", output.format(input.rstrip()))
# Remove both trailing and leading spaces
print(" strip() Output:", output.format(input.strip()))
一旦 input
を strip()
して、その結果をパイプ (|
) の間に追加すると、残った空白は非常に目立つようになります。
このコードを実行すると、次のような結果になります。
$ python trim.py
lstrip() Output: |Stack Abuse |
rstrip() Output: | Stack Abuse|
strip() Output: |Stack Abuse|
文字列から特殊文字を削除する方法
空の文字だけを取り除くのではなく、ある特定の末尾や先頭の特殊文字を取り除くことも珍しくありません。
strip()` メソッドに文字列の引数を渡してみましょう。
# trim_chars.py
input = " ~~ Stack Abuse ~~ "
output = "|{}|"
# Remove leading spaces or spaces to the left
print("lstrip() Output:", output.format(input.lstrip("~ ")))
# Remove trailing spaces or spaces to the right
print("rstrip() Output:", output.format(input.rstrip("~ ")))
# Remove both trailing and leading spaces
print(" strip() Output:", output.format(input.strip("~ ")))
チルダだけでなく空白文字 (“~
“) も strip()
メソッドの引数に渡して、文字列の左側、右側、両側からそのいずれかが出現するように削除しています。
注目すべきは、これらの順番は重要ではなく、 strip()
メソッドはこれらを除去するためにパターンマッチングを行わないということです。
概念的には、各文字に対して strip()
メソッドを 2 回呼び出すのと同じです。
このコードを実行すると、次のようになります。
$ python trim_chars.py
lstrip() Output: |Stack Abuse ~~ |
rstrip() Output: | ~~ Stack Abuse|
strip() Output: |Stack Abuse|
Pandasのシリーズでstrip()を使う
Pandas の Series
に対して、strip()
メソッドを実行することもできます。
シリーズの個々のセルについて、末尾のスペースや文字を取り除くことができます。
注意点としては、 strip()
操作を行う前に、系列を文字列系列に変換する必要があることです。
注意: Pandasを初めて使う方は、Pandasの初心者ガイドを読んで、ライブラリの詳細と設定方法を学んでください。
次のようなスクリプトを考えてみましょう。
# strip_series.py
import pandas as pd
s = pd.Series(['1. Cell1. ~', '2. Cell2!
'])
print("Before strip():
", s)
print("
After strip():
", s.str.strip('.
!~ '))
ここでは、特殊文字や末尾のスペースを含むセルを持つシリーズを作成しています。
series.str` を通して、Series の各要素に対してメソッドを実行することができます。
文字列であることを考慮すると、どのような文字列メソッドでも実行することができます。
とはいえ、シーケンスの各要素に対して strip()
を実行することは簡単にできます。
$ python strip_series.py
Before strip()
0 1. Cell1. ~
1 2. Cell2!
dtype: object
After strip()
0 1. Cell1
1 2. Cell2
dtype: object
結論
文字列から文字を取り除く(トリミングする)ことは、データセットや複数行のテキストファイル、あるいはAPIのレスポンスをクリーニングする際に非常に役に立ちます。
基本的で強力なPythonのメソッドは、Pandasのシリーズでも同様に動作することができます。