【python】pandas.dataframe.whereで条件に一致する値を指定の値に置換する方法

Python
JohnsonMartin / Pixabay

記事の概要

pythonのpandas.series.whereとっても便利ですが、使い方を間違えると重大なバグになってしまいます。使い方と注意点を記載します。

 0~5を保持するシリーズデータを作成する

>>> import pandas as pd

>>> s = pd.Series(range(5))

>>> print(s)

以下のようなシリーズができます。

0  0

1  1

2  2

3  3

4  4

dtype: int64

 1以上の値を1に置換する

条件:1以上の値 置換後の値:1

>>> s.where( s  <  1, 1)

>>> print(s)

以下のような実行結果になります。

0  0

1  1

2  1

3  1

4  1

dtype: int64

注意点

s.where(s < 1,1)

直感的に見るとs < 1なので、1未満だったら1に置換するように見えます。

pandas.dataframe.whereは逆なので注意してください。

pythonのドキュメントには以下のように記載されています。

下手な日本語で訳すと「条件がTrueであれば元々の値を保持、条件がFalseであればother_valueに対応する値に置換する」となっているので、pandasの不具合ではなく、仕様通りですね。

Where cond is True, keep the original value. Where False, replace with corresponding value from other

参考

コメント