2016-02-23 40 views
2

我正在傳遞一個字典到map函數來重新編碼熊貓數據框的列中的值。但是,我注意到如果原始序列中有一個值不在字典中,它會被重新編碼爲NaN。下面是一個簡單的例子:插入NaN的Python'map'函數可以返回原始值嗎?

打字...

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功能?我面臨的挑戰是,我無法始終預測我將要重新編碼的系列中的所有可能值 - 數據將在未來進行更新,並且可能會出現新的值。

謝謝!

+0

你沒有創建'four'字典條目。 – zondo

回答

10

使用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 
+0

完美地工作,謝謝!我懷疑這是簡單的東西:) – atkat12