記事の概要
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
参考
おすすめのPython学習本は↓です。
ゲーム作りながらPythonを楽しく学べるので、挫折しにくいです。
リンク
コメント