Pandas データフレームの列の値を再コード化するために、関数に辞書を渡していますmap
。ただし、元のシリーズに辞書に明示的に含まれていない値がある場合、その値は に再コード化されることに気付きましたNaN
。簡単な例を次に示します。
タイピング...
s = pd.Series(['one','two','three','four'])
...シリーズを作成する
0 one
1 two
2 three
3 four
dtype: object
しかし、地図を適用すると...
recodes = {'one':'A', 'two':'B', 'three':'C'}
s.map(recodes)
...シリーズを返します
0 A
1 B
2 C
3 NaN
dtype: object
s
シリーズ内のいずれかの要素が辞書にない場合は、変更されないままにしておくことをお勧めしますrecodes
。つまり、以下のシリーズを返すことをお勧めします (four
の代わりに元のものを使用しますNaN
)。
0 A
1 B
2 C
3 four
dtype: object
これを行う簡単な方法はありますか? たとえば、関数に渡すオプションなどmap
です。 私が抱えている課題は、再コーディングしているシリーズに含まれる可能性のあるすべての値を常に予測できるわけではないことです。データは将来更新され、新しい値が現れる可能性があります。
ありがとう!
ベストアンサー1
使用replace
の代わりにmap
:
>>> s = pd.Series(['one','two','three','four'])
>>> recodes = {'one':'A', 'two':'B', 'three':'C'}
>>> s.map(recodes)
0 A
1 B
2 C
3 NaN
dtype: object
>>> s.replace(recodes)
0 A
1 B
2 C
3 four
dtype: object