web-dev-qa-db-ja.com

Python 'map'関数はNaNを挿入し、代わりに元の値を返すことができますか?

辞書をmap関数に渡して、Pandasデータフレームの列の値を再コード化します。しかし、元の系列に値がある場合、次のようになります。辞書に明示的に記載されていない場合は、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関数に渡すオプションはありますか?私が抱えている課題は、再コーディングしているシリーズに含まれる可能性のあるすべての値を常に予測できるとは限らないことです。データは将来更新され、新しい値が表示される可能性があります。

ありがとう!

13
atkat12

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
21
DSM