24_Pandas.DataFrame,Series要素値の置換(replace)
24_Pandas.DataFrame,Series要素値の置換(replace)
pandasを置き換えるDataFrame,pandas.Series要素の値は、replace()メソッドを使用します.
ここで、以下に説明する.置換要素 複数の異なる要素を一度に置換 辞書で を指定リストに を指定する注意点 指定対象列により置換 . を正規表現で置き換える.欠落値NaN を置換変更元の項目 以下のデータを例にとります.一部の要素の値は説明のために変更されました.
この例はpandasである.DataFrame、しかしpandas.Seriesは同じです.
要素の置換
最初のパラメータに元の要素の値を指定し、2番目のパラメータに置換後の値を指定します.
すべての列要素が含まれます.特定のカラムの値のみを置換する場合は、以下を参照してください.
デフォルトでは、置換要素を持つ新しいDataFrameが返されますが、パラメータinplace=Trueの場合、元のDataFrameが変更されます.最後に、例を紹介します.
複数の異なる要素を一度に置換
複数の異なる要素を一度に置き換える場合は、辞書またはリストを使用します.
辞書での指定
最初のパラメータに{元の値:置換後の値}を指定する辞書.
リストでの指定
最初のパラメータに元の値のリストを指定し、2番目のパラメータに置換値のリストを指定します.リストのサイズ(要素数)が一致しない場合、エラーが発生します.
スカラー値を2番目のパラメータとして指定すると、すべての要素がその値に置き換えられます.
注意点
複数の置換ペア間の元の値と置換値が同じかどうかに注意してください.値は順番に置換されるため、置換された値はさらに置換されます.結果は順序に依存します.
辞書の例.
辞書の順序はPython 3.7以降は保持されているが、以前のバージョンでは定義されていない.必ずしも上記の結果のように見えるわけではありません.順序を明確に指定する場合は、replace()を繰り返し呼び出します.
リストでは、最初の要素が最初に置き換えられます.順序が重要な場合は、辞書を使用するよりもリストを使用するほうが簡単です.
指定したターゲット列で置換
{カラム名:{元の値:置換後の値}}の辞書を最初のパラメータとして指定すると、ターゲットカラムの要素のみが置換されます.辞書要素の数を増やすことで、複数のカラムと複数の値を一度に置き換えることができます.
リストに元の値と置換後の値を指定できません.
すべての値を同じ値で置換する場合は、最初のパラメータに{column name:original value}辞書を指定し、置換後の2番目のパラメータにスカラー値で値を指定します.最初のパラメータの元の値をリストとして指定できます.
正規表現で置換
正規表現は、パラメータregex=Trueとともに使用できます.
たとえば、既定では、要素の値が完全に一致している場合にのみ、要素の値が置き換えられます.したがって、部分的に一致しても、それらは置き換えられません.
たとえば、要素の文字列の一部を置換する場合は、パラメータregex=Trueを使用して正規表現に設定します.
()に含まれる部分は、置換後にグループとして順番に使用できます.たとえば、1および2です.
regex=Trueの場合は、正規表現モードを最初のパラメータとして、置換文字列を2番目のパラメータとして指定します.
特定のカラム要素の文字列の一部を置き換える場合は、str.replace()を使用することもできます.
詳細は以下の記事を参照してください. 13_Pandas文字列の置換やスペースの削除などの方法 欠落した値NaNの置換
欠落した値NaNを置換するためのfillna()という方法が提供される.
replace()は使用できますが、fillna()は行または列に応じて異なる値を置き換えることができます.
詳細は以下の記事を参照してください. 05_Pandasは削除し、欠落した値NaN を置換して抽出する.
元のアイテムの変更
デフォルトでは、置換要素を持つ新しいDataFrameが返されますが、パラメータinplace=Trueの場合、元のDataFrameが変更されます.
pandasを置き換えるDataFrame,pandas.Series要素の値は、replace()メソッドを使用します.
ここで、以下に説明する.
import pandas as pd
df = pd.read_csv('./data/24/sample_pandas_normal.csv')
df.iloc[1, 3] = 24
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 24
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
この例はpandasである.DataFrame、しかしpandas.Seriesは同じです.
要素の置換
最初のパラメータに元の要素の値を指定し、2番目のパラメータに置換後の値を指定します.
print(df.replace('CA', 'California'))
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 California 24
# 2 Charlie 18 California 70
# 3 Dave 68 TX 70
# 4 Ellen 24 California 88
# 5 Frank 30 NY 57
すべての列要素が含まれます.特定のカラムの値のみを置換する場合は、以下を参照してください.
print(df.replace(24, 100))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 CA 100
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 100 CA 88
# 5 Frank 30 NY 57
デフォルトでは、置換要素を持つ新しいDataFrameが返されますが、パラメータinplace=Trueの場合、元のDataFrameが変更されます.最後に、例を紹介します.
複数の異なる要素を一度に置換
複数の異なる要素を一度に置き換える場合は、辞書またはリストを使用します.
辞書での指定
最初のパラメータに{元の値:置換後の値}を指定する辞書.
print(df.replace({'CA': 'California', 24: 100}))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 California 100
# 2 Charlie 18 California 70
# 3 Dave 68 TX 70
# 4 Ellen 100 California 88
# 5 Frank 30 NY 57
リストでの指定
最初のパラメータに元の値のリストを指定し、2番目のパラメータに置換値のリストを指定します.リストのサイズ(要素数)が一致しない場合、エラーが発生します.
print(df.replace(['CA', 24], ['California', 100]))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 California 100
# 2 Charlie 18 California 70
# 3 Dave 68 TX 70
# 4 Ellen 100 California 88
# 5 Frank 30 NY 57
# print(df.replace(['CA', 24, 'NY'], ['California', 100]))
# ValueError: Replacement lists must match in length. Expecting 3 got 2
スカラー値を2番目のパラメータとして指定すると、すべての要素がその値に置き換えられます.
print(df.replace(['CA', 24], 'XXX'))
# name age state point
# 0 Alice XXX NY 64
# 1 Bob 42 XXX XXX
# 2 Charlie 18 XXX 70
# 3 Dave 68 TX 70
# 4 Ellen XXX XXX 88
# 5 Frank 30 NY 57
注意点
複数の置換ペア間の元の値と置換値が同じかどうかに注意してください.値は順番に置換されるため、置換された値はさらに置換されます.結果は順序に依存します.
辞書の例.
print(df.replace({'CA': 'NY', 'NY': 'XXX'}))
# name age state point
# 0 Alice 24 XXX 64
# 1 Bob 42 XXX 24
# 2 Charlie 18 XXX 70
# 3 Dave 68 TX 70
# 4 Ellen 24 XXX 88
# 5 Frank 30 XXX 57
print(df.replace({'NY': 'XXX', 'CA': 'NY'}))
# name age state point
# 0 Alice 24 XXX 64
# 1 Bob 42 NY 24
# 2 Charlie 18 NY 70
# 3 Dave 68 TX 70
# 4 Ellen 24 NY 88
# 5 Frank 30 XXX 57
辞書の順序はPython 3.7以降は保持されているが、以前のバージョンでは定義されていない.必ずしも上記の結果のように見えるわけではありません.順序を明確に指定する場合は、replace()を繰り返し呼び出します.
print(df.replace({'NY': 'XXX'}).replace({'CA': 'NY'}))
# name age state point
# 0 Alice 24 XXX 64
# 1 Bob 42 NY 24
# 2 Charlie 18 NY 70
# 3 Dave 68 TX 70
# 4 Ellen 24 NY 88
# 5 Frank 30 XXX 57
リストでは、最初の要素が最初に置き換えられます.順序が重要な場合は、辞書を使用するよりもリストを使用するほうが簡単です.
print(df.replace(['CA', 'NY'], ['NY', 'XXX']))
# name age state point
# 0 Alice 24 XXX 64
# 1 Bob 42 XXX 24
# 2 Charlie 18 XXX 70
# 3 Dave 68 TX 70
# 4 Ellen 24 XXX 88
# 5 Frank 30 XXX 57
print(df.replace(['NY', 'CA'], ['XXX', 'NY']))
# name age state point
# 0 Alice 24 XXX 64
# 1 Bob 42 NY 24
# 2 Charlie 18 NY 70
# 3 Dave 68 TX 70
# 4 Ellen 24 NY 88
# 5 Frank 30 XXX 57
指定したターゲット列で置換
{カラム名:{元の値:置換後の値}}の辞書を最初のパラメータとして指定すると、ターゲットカラムの要素のみが置換されます.辞書要素の数を増やすことで、複数のカラムと複数の値を一度に置き換えることができます.
print(df.replace({'age': {24: 100}}))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 CA 24
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 100 CA 88
# 5 Frank 30 NY 57
print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}}))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 CA 50
# 2 Charlie 0 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 100 CA 88
# 5 Frank 30 NY 57
リストに元の値と置換後の値を指定できません.
# print(df.replace({'age': [[24, 18], [100, 0]], 'point': {24: 50}}))
# TypeError: If a nested mapping is passed, all values of the top level mapping must be mappings
すべての値を同じ値で置換する場合は、最初のパラメータに{column name:original value}辞書を指定し、置換後の2番目のパラメータにスカラー値で値を指定します.最初のパラメータの元の値をリストとして指定できます.
print(df.replace({'age': 24, 'point': 70}, 100))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 CA 24
# 2 Charlie 18 CA 100
# 3 Dave 68 TX 100
# 4 Ellen 100 CA 88
# 5 Frank 30 NY 57
print(df.replace({'age': [24, 18], 'point': 70}, 100))
# name age state point
# 0 Alice 100 NY 64
# 1 Bob 42 CA 24
# 2 Charlie 100 CA 100
# 3 Dave 68 TX 100
# 4 Ellen 100 CA 88
# 5 Frank 30 NY 57
正規表現で置換
正規表現は、パラメータregex=Trueとともに使用できます.
たとえば、既定では、要素の値が完全に一致している場合にのみ、要素の値が置き換えられます.したがって、部分的に一致しても、それらは置き換えられません.
print(df.replace('li', 'LI'))
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 24
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
たとえば、要素の文字列の一部を置換する場合は、パラメータregex=Trueを使用して正規表現に設定します.
()に含まれる部分は、置換後にグループとして順番に使用できます.たとえば、1および2です.
print(df.replace('(.*)li(.*)', r'\1LI\2', regex=True))
# name age state point
# 0 ALIce 24 NY 64
# 1 Bob 42 CA 24
# 2 CharLIe 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
regex=Trueの場合は、正規表現モードを最初のパラメータとして、置換文字列を2番目のパラメータとして指定します.
特定のカラム要素の文字列の一部を置き換える場合は、str.replace()を使用することもできます.
df['name'] = df['name'].str.replace('li', 'LI')
print(df)
# name age state point
# 0 ALIce 24 NY 64
# 1 Bob 42 CA 24
# 2 CharLIe 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
詳細は以下の記事を参照してください.
欠落した値NaNを置換するためのfillna()という方法が提供される.
replace()は使用できますが、fillna()は行または列に応じて異なる値を置き換えることができます.
詳細は以下の記事を参照してください.
元のアイテムの変更
デフォルトでは、置換要素を持つ新しいDataFrameが返されますが、パラメータinplace=Trueの場合、元のDataFrameが変更されます.
df = pd.read_csv('./data/24/sample_pandas_normal.csv')
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
df.replace('CA', 'California', inplace=True)
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 California 92
# 2 Charlie 18 California 70
# 3 Dave 68 TX 70
# 4 Ellen 24 California 88
# 5 Frank 30 NY 57