pandas.Series.mask 解説
pandas.Series.mask 解説
pandas.Series.mask
は、Series
オブジェクト内の特定の条件を満たす要素を、別の値に置き換えるためのメソッドです。条件を満たさない要素は元の値のまま保持されます。
構文
Series.mask(cond, other=np.nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False)
引数
cond
: 条件を指定するSeries
オブジェクト、ndarray
、または条件を返す関数other
: 条件を満たす要素に置き換える値。デフォルトはnp.nan
inplace
: True の場合、元のSeries
オブジェクトを変更します。False の場合は、新しいSeries
オブジェクトを返します。デフォルトは Falseaxis
: 軸指定。デフォルトは Nonelevel
: レベル指定。デフォルトは Noneerrors
: エラー処理方法を指定します。'raise' または 'ignore' のいずれかを指定できます。デフォルトは 'raise'try_cast
: 結果を元の型にキャストするかどうかのフラグ。デフォルトは False
戻り値
条件を満たす要素を置き換えた新しい Series
オブジェクト
例
以下の例では、Series
オブジェクト s
のうち、値が 5 以下の要素を np.nan
に置き換えます。
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
result = s.mask(s <= 5)
print(result)
出力:
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
dtype: float64
cond
には、Series
オブジェクト、ndarray
、または条件を返す関数を使用できます。other
には、スカラ値、Series
オブジェクト、または値を返す関数を使用できます。inplace
を True に設定すると、元のSeries
オブジェクトが変更されるため、注意が必要です。- 条件を満たす要素が
Series
オブジェクト全体の場合、other
の値がSeries
オブジェクトである必要があります。
応用例
- 特定の値以下の要素をすべて
np.nan
に置き換える - 特定の条件を満たす要素を別の値に置き換える
- データの一部をマスクして分析を行う
import pandas as pd
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 5 以下の要素を NaN に置き換える
result = s.mask(s <= 5)
print(result)
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
dtype: float64
import pandas as pd
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 偶数である要素を 100 に置き換える
def is_even(x):
return x % 2 == 0
result = s.mask(is_even, 100)
print(result)
出力:
0 1
1 2
2 100
3 4
4 5
5 100
6 100
7 8
8 100
9 100
dtype: int64
import pandas as pd
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 5 以下の要素をマスクして、平均値と標準偏差を計算する
masked_data = s.mask(s <= 5)
print(masked_data.mean())
print(masked_data.std())
6.0
2.8284271247460256
where()
メソッドは、Series
オブジェクト内の要素を条件に応じて別の値に置き換えることができます。mask()
メソッドと似ていますが、以下の点で異なります。
- 条件を満たす要素を
True
の値に置き換える - 置き換える値を条件ごとに別々に設定できる
利点
- 条件を満たす要素とそうでない要素を別々に処理できる
- 置き換える値を柔軟に設定できる
欠点
mask()
メソッドよりも冗長な記述になる場合がある
import pandas as pd
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 5 以下の要素を NaN に、それ以外の要素を 100 に置き換える
result = s.where(s <= 5, np.nan, 100)
print(result)
0 100
1 100
2 100
3 100
4 100
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
dtype: float64
loc 属性
loc
属性は、行インデックスと列インデックスを使用して Series
オブジェクトの要素にアクセスおよび設定できます。条件に応じて要素を置き換えるために使用することもできます。
- シンプルで分かりやすい構文
- 複雑な条件にも対応できる
- パフォーマンスが劣る場合がある
import pandas as pd
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 5 以下の要素を NaN に置き換える
s.loc[s <= 5] = np.nan
print(s)
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
dtype: float64
np.where() 関数
np.where()
関数は、NumPy 配列に対して条件に応じて要素を置き換えることができます。Series
オブジェクトの値を置き換えるために使用することもできますが、pandas
専用のメソッドではないため、where()
メソッドや loc
属性よりも冗長な記述になる場合があります。
- NumPy 配列だけでなく、
Series
オブジェクトにも使用できる - 柔軟性の高い条件式を使用できる
pandas
専用のメソッドではないため、冗長な記述になる場合がある
import pandas as pd
import numpy as np
# データの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series(data)
# 5 以下の要素を NaN に、それ以外の要素を 100 に置き換える
result = np.where(s <= 5, np.nan, 100)
print(result)
[ 100. 100. 100. 100. 100. NaN NaN NaN NaN NaN]
リスト内包表記
リスト内包表記は、条件に応じて新しいリストを作成するための簡潔な方法です。Series
オブジェクトの値を置き換えるために使用することもできますが、データ量が多い場合はパフォーマンスが低下する可能性があります。
- 簡潔で分かりやすい構文
- データ量が多い場合はパフォーマンスが低下する可能性がある
import pandas as pd
# データの作成
data =