Pandas Series.str.replace() 関数
Series.str.replace()Pandas において、文字列内の指定された内容を置換するための関数です。
データ処理の過程では、誤ったテキストの修正、データ形式の標準化、不要な文字の削除など、テキストに対する置換操作が頻繁に必要になります。replace()この関数は文字列内の指定された内容を柔軟に置換でき、正規表現マッチングをサポートしています。
単語の意味:replace「置換」という意味で、新しい内容で古い内容を置き換えることを表します。
基本構文とパラメータ
str.replace()Series の文字列アクセサメソッドです。そのため、まず文字列を含む Series が必要であり、次に.strアクセサを使用して呼び出します。
構文形式
Series.str.replace(pat, repl, regex=False)
パラメータの説明
| パラメータ | 型 | 必須かどうか | 説明 | デフォルト値 |
|---|---|---|---|---|
| pat | str または regex | 必須 | 置換するパターン。通常の文字列または正規表現(regex=True の場合)を指定できます。 | - |
| repl | str または callable | 必須 | 置換後の内容。文字列または呼び出し可能な関数(高度な置換用)を指定できます。 | - |
| regex | bool | オプション | pat パラメータを正規表現として処理するかどうか。デフォルトは False です。 | False |
関数の説明
- 戻り値:置換後の新しい Series を返します。
- 効果:Series 内の各文字列要素でマッチした内容を新しい内容に置換します。
- 注意:デフォルトでは通常の文字列マッチングを使用します。正規表現マッチングが必要な場合は、設定が必要です。
regex=True。
例
簡単なものから複雑なものまでの一連の例を通して、完全にstr.replace()使い方をマスターしましょう。
例1:基本用法 - 簡単な文字列置換
例
import pandas as pd
# テキストを含む Series を作成する
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 'ap' を 'XX' に置換する
result = s.str.replace('ap', 'XX')
print("元の Series:")
print(s)
print("n置換後の結果:")
print(result)
# テキストを含む Series を作成する
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 'ap' を 'XX' に置換する
result = s.str.replace('ap', 'XX')
print("元の Series:")
print(s)
print("n置換後の結果:")
print(result)
出力結果:
原始 Series: 0 apple 1 banana 2 apricot 3 pineapple dtype: object 替换后的结果: 0 XXle 1 banana 2 XXricot 3 XXneXXple
コード解説:
s.str.replace('ap', 'XX')出現するすべての 'ap' を 'XX' に置換します。- デフォルトでは、最初の一致項目のみ置換されます(文字列内に複数回出現する場合、最初のものだけが置換されます)。
- 正規表現フラグを追加することで、すべての一致項目を置換できます。
例2:正規表現ですべての一致項目を置換
すべての一致項目を置換する必要がある場合は、正規表現を使用できます。
例
import pandas as pd
# テキストを含む Series を作成する
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 正規表現を使用してすべての 'ap' を 'XX' に置換する
result = s.str.replace('ap', 'XX', regex=True)
print("元の Series:")
print(s)
print("nすべての 'ap' を置換した結果:")
print(result)
# テキストを含む Series を作成する
s = pd.Series(['apple', 'banana', 'apricot', 'pineapple'])
# 正規表現を使用してすべての 'ap' を 'XX' に置換する
result = s.str.replace('ap', 'XX', regex=True)
print("元の Series:")
print(s)
print("nすべての 'ap' を置換した結果:")
print(result)
出力結果:
原始 Series: 0 apple 1 banana 2 apricot 3 pineapple dtype: object 替换所有 'ap' 后的结果: 0 XXle 1 banana 2 XXricot 3 XXneXXple
コード解説:
- 設定
regex=True後、正規表現を使用してマッチングします。 - 正規表現では、
'ap'文字列内に出現するすべての 'ap' にマッチします。 - 'pineapple' には 'ap' が2つあり、両方とも 'XX' に置換されます。
例3:数字と記号の置換
replace()データのクリーニングに使用できます。たとえば、数字や特殊記号を削除します。
例
import pandas as pd
# 混合コンテンツを含む Series を作成する
s = pd.Series(['phone: 123-456-7890', 'price: $99.99', 'date: 2024-01-01'])
# すべての数字を削除する
result_digits = s.str.replace(r'd', '', regex=True)
# すべての非英数字文字を削除する(スペースは保持)
result_special = s.str.replace(r'[^a-zA-Z0-9s]', '', regex=True)
print("元の Series:")
print(s)
print("nすべての数字を削除した後:")
print(result_digits)
print("nすべての特殊文字を削除した後:")
print(result_special)
# 混合コンテンツを含む Series を作成する
s = pd.Series(['phone: 123-456-7890', 'price: $99.99', 'date: 2024-01-01'])
# すべての数字を削除する
result_digits = s.str.replace(r'd', '', regex=True)
# すべての非英数字文字を削除する(スペースは保持)
result_special = s.str.replace(r'[^a-zA-Z0-9s]', '', regex=True)
print("元の Series:")
print(s)
print("nすべての数字を削除した後:")
print(result_digits)
print("nすべての特殊文字を削除した後:")
print(result_special)
出力結果:
原始 Series: 0 phone: 123-456-7890 1 price: $99.99 2 date: 2024-01-01 dtype: object 移除所有数字后: phone: --- price: $.$ date: ------ 移除所有特殊字符后: phone 1234567890 price 9999 date 20240101
コード解説:
r'd'は正規表現であり、任意の数字にマッチします。r'[^a-zA-Z0-9s]'すべての非英数字かつ非スペースの文字にマッチします。- これはデータクリーニングにおいて非常に一般的な操作です。
例4:コールバック関数を使用した置換
replパラメータには関数を指定でき、より複雑な置換ロジックに使用できます。
例
import pandas as pd
# テキストを含む Series を作成する
s = pd.Series(['hello', 'world', 'サンプル', 'python'])
# コールバック関数を使用して、マッチした文字列を大文字に変換する
result = s.str.replace(r'[aeiou]', lambda m: m.group(0).upper(), regex=True)
print("元の Series:")
print(s)
print("n母音を大文字に変換した後:")
print(result)
# テキストを含む Series を作成する
s = pd.Series(['hello', 'world', 'サンプル', 'python'])
# コールバック関数を使用して、マッチした文字列を大文字に変換する
result = s.str.replace(r'[aeiou]', lambda m: m.group(0).upper(), regex=True)
print("元の Series:")
print(s)
print("n母音を大文字に変換した後:")
print(result)
出力結果:
原始 Series: 0 hello 1 world 2 サンプル 3 python dtype: object 将元音字母转为大写后: 0 hEllo 1 wOrld 2 example 3 pythOn
コード解説:
- コールバック関数はマッチオブジェクトを受け取り、次を使用できます
m.group(0)マッチした内容を取得します。 - 母音(a, e, i, o, u)を大文字に変換します。
- これはより複雑な置換ロジックを実装するための良い方法です。
例5:データ形式の標準化
実際のプロジェクトでは、replace()データ形式の標準化によく使用されます。
例
import pandas as pd
# ユーザー入力の国名をシミュレート(形式が統一されていない)
countries = pd.Series(['USA', 'U.S.A.', 'U.S.A', 'usa', 'us', 'United States'])
# 標準名に一括置換する
result = countries.replace({
'USA': 'US',
'U.S.A.': 'US',
'U.S.A': 'US',
'usa': 'US',
'us': 'US',
'United States': 'US'
})
print("元の国名:")
print(countries)
print("n統一後の結果:")
print(result)
# ユーザー入力の国名をシミュレート(形式が統一されていない)
countries = pd.Series(['USA', 'U.S.A.', 'U.S.A', 'usa', 'us', 'United States'])
# 標準名に一括置換する
result = countries.replace({
'USA': 'US',
'U.S.A.': 'US',
'U.S.A': 'US',
'usa': 'US',
'us': 'US',
'United States': 'US'
})
print("元の国名:")
print(countries)
print("n統一後の結果:")
print(result)
出力結果:
原始国家名称: 0 USA 1 U.S.A. 2 U.S.A 3 usa 4 us 5 United States dtype: object 统一后的结果: 0 US 1 US 2 US 3 US 4 0 US dtype: object
コード解説:
- この例では Series の
replace()メソッド(str.replace ではありません)を使用しています。 - 辞書を渡すことで、複数の値を一括置換できます。
- さまざまな異なる表記を標準形式に統一します。
注意事項
- デフォルトでは(
regex=False),patパラメータは通常の文字列として扱われ、最初の一致項目のみ置換されます。 - 設定
regex=True後、正規表現を使用してマッチングすることで、すべての一致項目を置換できます。 - 正規表現内の一部の特殊文字(例:
.、*など)はエスケープが必要です。 - Series に NaN 値が含まれている場合、
replace()NaN が返されます。 - この関数は新しい Series を返し、元のデータは変更されません。
その他の拡張
Pandas よく使われる関数